rtutils.h (5.2.3790.1830-Windows 5.0) | | rtutils.h (6.0.6002.18005-Windows 6.0) |
| | |
skipping to change at line 283 | | skipping to change at line 283 |
// // | | // // |
// ANSI prototypes // | | // ANSI prototypes // |
// // | | // // |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
| | |
VOID | | VOID |
APIENTRY | | APIENTRY |
LogErrorA( | | LogErrorA( |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD cNumberOfSubStrings, | | IN DWORD cNumberOfSubStrings, |
|
IN LPSTR *plpwsSubStrings, | | __in_ecount(cNumberOfSubStrings) IN LPSTR *plpwsSubStrings, |
IN DWORD dwErrorCode | | IN DWORD dwErrorCode |
); | | ); |
| | |
VOID | | VOID |
APIENTRY | | APIENTRY |
LogEventA( | | LogEventA( |
IN DWORD wEventType, | | IN DWORD wEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD cNumberOfSubStrings, | | IN DWORD cNumberOfSubStrings, |
|
IN LPSTR *plpwsSubStrings | | __in_ecount(cNumberOfSubStrings) IN LPSTR *plpwsSubStrings |
); | | ); |
| | |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
// // | | // // |
// Unicode prototypes // | | // Unicode prototypes // |
// // | | // // |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
| | |
VOID | | VOID |
LogErrorW( | | LogErrorW( |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD cNumberOfSubStrings, | | IN DWORD cNumberOfSubStrings, |
|
IN LPWSTR *plpwsSubStrings, | | __in_ecount(cNumberOfSubStrings) IN LPWSTR *plpwsSubStrings, |
IN DWORD dwErrorCode | | IN DWORD dwErrorCode |
); | | ); |
| | |
VOID | | VOID |
LogEventW( | | LogEventW( |
IN DWORD wEventType, | | IN DWORD wEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD cNumberOfSubStrings, | | IN DWORD cNumberOfSubStrings, |
|
IN LPWSTR *plpwsSubStrings | | __in_ecount(cNumberOfSubStrings) IN LPWSTR *plpwsSubStrings |
); | | ); |
| | |
#ifdef UNICODE | | #ifdef UNICODE |
#define LogError LogErrorW | | #define LogError LogErrorW |
#define LogEvent LogEventW | | #define LogEvent LogEventW |
#else | | #else |
#define LogError LogErrorA | | #define LogError LogErrorA |
#define LogEvent LogEventA | | #define LogEvent LogEventA |
#endif | | #endif |
| | |
| | |
skipping to change at line 365 | | skipping to change at line 365 |
RouterLogDeregisterA( | | RouterLogDeregisterA( |
HANDLE hLogHandle | | HANDLE hLogHandle |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventA( | | RouterLogEventA( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPSTR *plpszSubStringArray, | | IN __in_ecount_opt(dwSubStringCount) LPSTR *plpszSubStringArray, |
IN DWORD dwErrorCode | | IN DWORD dwErrorCode |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventDataA( | | RouterLogEventDataA( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPSTR *plpszSubStringArray, | | __in_ecount_opt(dwSubStringCount) IN LPSTR *plpszSubStringArray, |
IN DWORD dwDataBytes, | | IN DWORD dwDataBytes, |
IN LPBYTE lpDataBytes | | IN LPBYTE lpDataBytes |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventStringA( | | RouterLogEventStringA( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPSTR *plpszSubStringArray, | | __in_ecount(dwSubStringCount) IN LPSTR *plpszSubStringArray, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
IN DWORD dwErrorIndex | | IN DWORD dwErrorIndex |
); | | ); |
| | |
VOID | | VOID |
__cdecl | | __cdecl |
RouterLogEventExA( | | RouterLogEventExA( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
| | |
skipping to change at line 415 | | skipping to change at line 415 |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN LPCSTR ptszFormat, | | IN LPCSTR ptszFormat, |
IN va_list arglist | | IN va_list arglist |
); | | ); |
| | |
DWORD | | DWORD |
RouterGetErrorStringA( | | RouterGetErrorStringA( |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
|
OUT LPSTR * lplpszErrorString | | __out OUT LPSTR * lplpszErrorString |
); | | ); |
| | |
#define RouterLogErrorA(h,msg,count,array,err) \ | | #define RouterLogErrorA(h,msg,count,array,err) \ |
RouterLogEventA(h,EVENTLOG_ERROR_TYPE,msg,count,array,err) | | RouterLogEventA(h,EVENTLOG_ERROR_TYPE,msg,count,array,err) |
#define RouterLogWarningA(h,msg,count,array,err) \ | | #define RouterLogWarningA(h,msg,count,array,err) \ |
RouterLogEventA(h,EVENTLOG_WARNING_TYPE,msg,count,array,err) | | RouterLogEventA(h,EVENTLOG_WARNING_TYPE,msg,count,array,err) |
#define RouterLogInformationA(h,msg,count,array,err) \ | | #define RouterLogInformationA(h,msg,count,array,err) \ |
RouterLogEventA(h,EVENTLOG_INFORMATION_TYPE,msg,count,array,err) | | RouterLogEventA(h,EVENTLOG_INFORMATION_TYPE,msg,count,array,err) |
| | |
#define RouterLogErrorDataA(h,msg,count,array,c,buf) \ | | #define RouterLogErrorDataA(h,msg,count,array,c,buf) \ |
| | |
skipping to change at line 462 | | skipping to change at line 462 |
RouterLogDeregisterW( | | RouterLogDeregisterW( |
HANDLE hLogHandle | | HANDLE hLogHandle |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventW( | | RouterLogEventW( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPWSTR *plpszSubStringArray, | | IN __in_ecount_opt(dwSubStringCount) LPWSTR *plpszSubStringArray, |
IN DWORD dwErrorCode | | IN DWORD dwErrorCode |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventDataW( | | RouterLogEventDataW( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPWSTR *plpszSubStringArray, | | __in_ecount_opt(dwSubStringCount) IN LPWSTR *plpszSubStringArray, |
IN DWORD dwDataBytes, | | IN DWORD dwDataBytes, |
IN LPBYTE lpDataBytes | | IN LPBYTE lpDataBytes |
); | | ); |
| | |
VOID | | VOID |
RouterLogEventStringW( | | RouterLogEventStringW( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN DWORD dwSubStringCount, | | IN DWORD dwSubStringCount, |
|
IN LPWSTR *plpszSubStringArray, | | __in_ecount(dwSubStringCount) IN LPWSTR *plpszSubStringArray, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
IN DWORD dwErrorIndex | | IN DWORD dwErrorIndex |
); | | ); |
| | |
VOID | | VOID |
__cdecl | | __cdecl |
RouterLogEventExW( | | RouterLogEventExW( |
IN HANDLE hLogHandle, | | IN HANDLE hLogHandle, |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
| | |
skipping to change at line 512 | | skipping to change at line 512 |
IN DWORD dwEventType, | | IN DWORD dwEventType, |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
IN DWORD dwMessageId, | | IN DWORD dwMessageId, |
IN LPCWSTR ptszFormat, | | IN LPCWSTR ptszFormat, |
IN va_list arglist | | IN va_list arglist |
); | | ); |
| | |
DWORD | | DWORD |
RouterGetErrorStringW( | | RouterGetErrorStringW( |
IN DWORD dwErrorCode, | | IN DWORD dwErrorCode, |
|
OUT LPWSTR * lplpwszErrorString | | __out OUT LPWSTR * lplpwszErrorString |
); | | ); |
| | |
#define RouterLogErrorW(h,msg,count,array,err) \ | | #define RouterLogErrorW(h,msg,count,array,err) \ |
RouterLogEventW(h,EVENTLOG_ERROR_TYPE,msg,count,array,err) | | RouterLogEventW(h,EVENTLOG_ERROR_TYPE,msg,count,array,err) |
#define RouterLogWarningW(h,msg,count,array,err) \ | | #define RouterLogWarningW(h,msg,count,array,err) \ |
RouterLogEventW(h,EVENTLOG_WARNING_TYPE,msg,count,array,err) | | RouterLogEventW(h,EVENTLOG_WARNING_TYPE,msg,count,array,err) |
#define RouterLogInformationW(h,msg,count,array,err) \ | | #define RouterLogInformationW(h,msg,count,array,err) \ |
RouterLogEventW(h,EVENTLOG_INFORMATION_TYPE,msg,count,array,err) | | RouterLogEventW(h,EVENTLOG_INFORMATION_TYPE,msg,count,array,err) |
| | |
#define RouterLogErrorDataW(h,msg,count,array,c,buf) \ | | #define RouterLogErrorDataW(h,msg,count,array,c,buf) \ |
| | |
skipping to change at line 592 | | skipping to change at line 592 |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
// // | | // // |
// definition of worker function passed in QueueWorkItem API // | | // definition of worker function passed in QueueWorkItem API // |
// // | | // // |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
| | |
typedef VOID (APIENTRY * WORKERFUNCTION)(PVOID); | | typedef VOID (APIENTRY * WORKERFUNCTION)(PVOID); |
| | |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
// // | | // // |
|
// Function: Queues the supplied work item in the work queue. // | | |
// // | | |
// functionptr: function to be called must be of WORKERFUNCTION type // | | |
// context: opaque ptr // | | |
// serviceinalertablethread: if TRUE gets scheduled in // | | |
// a alertably waiting thread that never dies // | | |
// Returns: 0 (success) // | | |
// Win32 error codes for cases like out of memory // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
DWORD | | |
APIENTRY | | |
QueueWorkItem( | | |
IN WORKERFUNCTION functionptr, | | |
IN PVOID context, | | |
IN BOOL serviceinalertablethread | | |
); | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// Function: Associates file handle with the completion port (all // | | |
// asynchronous i/o on this handle will be queued to // | | |
// the completion port) | | |
// | | |
// // | | |
// FileHandle: File handle to be associated with completion port // | | |
// // | | |
// CompletionProc: Procedure to be called when io associated with the file // | | |
// handle completes. This function will be execu | | |
ted in // | | |
// the context of non-alertable worker thread | | |
// | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
DWORD | | |
APIENTRY | | |
SetIoCompletionProc ( | | |
IN HANDLE FileHandl | | |
e, | | |
IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionProc | | |
); | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// The following defines are included here as a hint on how the worker // | | |
// thread pool is managed: // | | |
// // | | |
// There are NUM_ALERTABLE_THREADS permanent threads that never quit and // | | |
// wait alertably on a alertable worker queue. These threads should solely // | | |
// be used for work items that intiate asyncronous operation (file io, // | | |
// waitable timer) that ABSOLUTELY require APCs to complete (preferable // | | |
// method for IO is the usage of completio port API) // | | |
// // | | |
// There is a pool of the threads that wait on completion port // | | |
// that used both for processing of IO and non-IO related work items // | | |
// // | | |
// The minimum number of threads is Number of processors // | | |
// The maximum number of threads is MAX_WORKER_THREADS // | | |
// // | | |
// A new thread is created if worker queue has not been served for more // | | |
// that WORK_QUEUE_TIMEOUT // | | |
// The existing thread will be shut down if it is not used for more than // | | |
// THREAD_IDLE_TIMEOUT // | | |
// // | | |
// Note that worker threads age guaranteed to be alive for at least // | | |
// THREAD_IDLE_TIMEOUT after the last work item is executed. This timeout // | | |
// is chosen such that bulk of IO request could be completed before it // | | |
// expires. If it is not enough for your case, use alertable thread with // | | |
// APC, or create your own thread. // | | |
// // | | |
// Note: changing these flags will not change anything. // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// Number of alertable threads // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
#define NUM_ALERTABLE_THREADS 2 | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// Max number of threads at any time // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
#define MAX_WORKER_THREADS 10 | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// Time that the worker queue is not served before starting new thread // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
#define WORK_QUEUE_TIMEOUT 1 //sec | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// Time that thread has to be idle before exiting // | | |
// // | | |
////////////////////////////////////////////////////////////////////////////// | | |
| | |
#define THREAD_IDLE_TIMEOUT 10 //sec | | |
| | |
////////////////////////////////////////////////////////////////////////////// | | |
// // | | |
// ROUTER ASSERT DECLARATION // | | // ROUTER ASSERT DECLARATION // |
// // | | // // |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
| | |
VOID | | VOID |
RouterAssert( | | RouterAssert( |
|
IN PSTR pszFailedAssertion, | | __in IN PSTR pszFailedAssertion, |
IN PSTR pszFileName, | | __in IN PSTR pszFileName, |
IN DWORD dwLineNumber, | | __in IN DWORD dwLineNumber, |
IN PSTR pszMessage OPTIONAL | | __in IN PSTR pszMessage OPTIONAL |
); | | ); |
| | |
#if DBG | | #if DBG |
#define RTASSERT(exp) \ | | #define RTASSERT(exp) \ |
if (!(exp)) \ | | if (!(exp)) \ |
RouterAssert(#exp, __FILE__, __LINE__, NULL) | | RouterAssert(#exp, __FILE__, __LINE__, NULL) |
#define RTASSERTMSG(msg, exp) \ | | #define RTASSERTMSG(msg, exp) \ |
if (!(exp)) \ | | if (!(exp)) \ |
RouterAssert(#exp, __FILE__, __LINE__, msg) | | RouterAssert(#exp, __FILE__, __LINE__, msg) |
#else | | #else |
| | |
skipping to change at line 784 | | skipping to change at line 678 |
////////////////////////////////////////////////////////////////////////////// | | ////////////////////////////////////////////////////////////////////////////// |
| | |
#define ROUTING_RESERVED | | #define ROUTING_RESERVED |
#define OPT1_1 | | #define OPT1_1 |
#define OPT1_2 | | #define OPT1_2 |
#define OPT2_1 | | #define OPT2_1 |
#define OPT2_2 | | #define OPT2_2 |
#define OPT3_1 | | #define OPT3_1 |
#define OPT3_2 | | #define OPT3_2 |
| | |
|
// | | |
// When everyone is migrated to using Winsock2 | | |
// | | |
| | |
#if 0 | | |
| | |
//============================================================================== | | |
============================// | | |
//============================================================================== | | |
============================// | | |
| | |
// ASYNC_SOCKET_DATA structure is used to pass / receive back data from an / | | |
/ | | |
// asynchronous wait recv from call | | |
// | | |
| | |
typedef struct _ASYNC_SOCKET_DATA { | | |
OVERLAPPED Overlapped; / | | |
/ reserved. not to be used | | |
IN WSABUF WsaBuf; / | | |
/ WsaBuf.buf to be initialized to point to buffer | | |
| | |
// WsaBuf.len set to the length of the buffer | | |
OUT SOCKADDR_IN SrcAddress; / | | |
/ AsyncWsaRecvFrom fills this with the source address of the packet | | |
OUT DWORD NumBytesReceived; // AsyncW | | |
saRecvFrom fills this with the number of bytes returned in the packet | | |
IN OUT DWORD Flags; // Used t | | |
o set flags for WSARecvFrom, and returns the flags set by WSARecvFrom | | |
OUT DWORD Status; / | | |
/ status returned by IO Completion Port | | |
| | |
IN WORKERFUNCTION pFunction; // Functi | | |
on to be executed on receiving packet | | |
IN PVOID pContext; / | | |
/ context for the above function | | |
} ASYNC_SOCKET_DATA, *PASYNC_SOCKET_DATA; | | |
| | |
// AsyncSocketInit() binds the socket to the IOCompletionPort. This should be ca | | |
lled// | | |
// after the socket is created and before AsyncWsaRecvFrom() call is made | | |
// | | |
DWORD | | |
APIENTRY | | |
AsyncSocketInit ( | | |
SOCKET sock | | |
); | | |
| | |
// This should be called only after the appropriate fields in SockData are initi | | |
alized // | | |
// This sets up an asynchronous WSARecvFrom(), and on its return dispatches the | | |
// | | |
// function to a worker thread. It should be remembered that the function will r | | |
un in // | | |
// a worker thread which might later on be deleted. So SetWaitableTimer() and | | |
// | | |
// asynchronous receive calls should be avoided unless you are sure that it woul | | |
d not be// | | |
// a problem. It is adviced that if you want the function to run in an alertable | | |
thread,// | | |
// then have the callback function queue a work item to alertable thread. Queue | | |
work // | | |
// items to alertable worker threads for SetWaitableTimer() and async receives. | | |
// | | |
// One must not make many AsyncWSArecvFrom() calls, as the buffer are non-paged | | |
// | | |
DWORD | | |
APIENTRY | | |
AsyncWSARecvFrom ( | | |
SOCKET sock, | | |
PASYNC_SOCKET_DATA pSockData | | |
); | | |
| | |
#endif // all winsock2 functions | | |
| | |
//============================================================================== | | |
============================// | | |
//============================================================================== | | |
============================// | | |
| | |
// forward declarations | | |
struct _WAIT_THREAD_ENTRY; | | |
struct _WT_EVENT_ENTRY; | | |
| | |
typedef struct _WT_TIMER_ENTRY { | | |
LONGLONG te_Timeout; | | |
| | |
WORKERFUNCTION te_Function; | | |
PVOID te_Context; | | |
DWORD te_ContextSz; | | |
BOOL te_RunInServer; | | |
| | |
DWORD te_Status; | | |
| | |
#define TIMER_INACTIVE 3 | | |
#define TIMER_ACTIVE 4 | | |
| | |
DWORD te_ServerId; | | |
struct _WAIT_THREAD_ENTRY *teP_wte; | | |
LIST_ENTRY te_ServerLinks; | | |
| | |
LIST_ENTRY te_Links; | | |
| | |
BOOL te_Flag; //todo: not used | | |
DWORD te_TimerId; | | |
} WT_TIMER_ENTRY, *PWT_TIMER_ENTRY; | | |
| | |
typedef struct _WT_WORK_ITEM { | | |
WORKERFUNCTION wi_Function; // function to ca | | |
ll | | |
PVOID wi_Context; // contex | | |
t passed into function call | | |
DWORD wi_ContextSz; / | | |
/ size of context, used for allocating | | |
BOOL wi_RunInServer; / | | |
/ run in wait server thread or get queued to some worker thread | | |
| | |
struct _WT_EVENT_ENTRY *wiP_ee; | | |
LIST_ENTRY wi_ServerLinks; | | |
LIST_ENTRY wi_Links; //todo no | | |
t req // link to next and prev element | | |
} WT_WORK_ITEM, *PWT_WORK_ITEM; | | |
| | |
#define WT_EVENT_BINDING WT_WORK_ITEM | | |
#define PWT_EVENT_BINDING PWT_WORK_ITEM | | |
| | |
// | | |
// WT_EVENT_ENTRY | | |
// | | |
typedef struct _WT_EVENT_ENTRY { | | |
HANDLE ee_Event; | | |
BOOL ee_bManualReset; | | |
// is the event manually reset | | |
BOOL ee_bInitialState; | | |
// is the initial state of the event active | | |
BOOL ee_bDeleteEvent; | | |
// was the event created as part of createWaitEvent | | |
| | |
DWORD ee_Status; | | |
// current status of the event entry | | |
BOOL ee_bHighPriority; | | |
| | |
LIST_ENTRY eeL_wi; | | |
| | |
BOOL ee_bSignalSingle; | | |
// signal single function or multiple functions | | |
// how many functions to activate when event signalled (d | | |
efault:1) | | |
BOOL ee_bOwnerSelf; | | |
// the owner if the client which create this event | | |
| | |
INT ee_ArrayIndex; | | |
// index in the events array if active | | |
| | |
DWORD ee_ServerId; | | |
// Id of server: used while deleting | | |
struct _WAIT_THREAD_ENTRY *eeP_wte; | | |
// pointer to wait thread entry | | |
LIST_ENTRY ee_ServerLinks; | | |
// used by wait server thread | | |
LIST_ENTRY ee_Links; | | |
// used by client | | |
| | |
DWORD ee_RefCount; | | |
BOOL ee_bFlag; //todo: notused | | |
// reserved for use during deleti | | |
on | | |
DWORD ee_EventId; //todo: remove it, being | | |
used only for testing/debugging | | |
| | |
} WT_EVENT_ENTRY, *PWT_EVENT_ENTRY; | | |
| | |
// PROTOTYPES OF FUNCTIONS USED IN THIS FILE ONLY | | |
// | | |
| | |
// used by client to create a wait event | | |
// context size should be 0 if you are passing a dword instead of a pointer | | |
// if pEvent field is set, then lpName and security attributes are ignored | | |
// if pFunction is NULL, then pContext, dwContextSz, and bRunInServerContext are | | |
ignored | | |
PWT_EVENT_ENTRY | | |
APIENTRY | | |
CreateWaitEvent ( | | |
//IN PWT_EVENT_ENTRY pEventEntry, / | | |
/ handle to event entry if initialized by others | | |
IN HANDLE pEvent OPT1_1, | | |
// handle to event if already created | | |
| | |
IN LPSECURITY_ATTRIBUTES lpEventAttributes OPT1_2, // pointe | | |
r to security attributes | | |
IN BOOL bManualReset, | | |
IN BOOL bInitialState, | | |
IN LPCTSTR lpName OPT1_2, | | |
// pointer to event-object name | | |
| | |
IN BOOL bHighPriority, | | |
// create high priority event | | |
| | |
IN WORKERFUNCTION pFunction OPT2_1, | | |
// if null, means will be set by other clients | | |
IN PVOID pContext OPT2_1, | | |
// can be null | | |
IN DWORD dwContextSz OPT2_1, | | |
// size of context: used for allocating context to functions | | |
IN BOOL bRunInServerContext OPT2_1 | | |
// run in server thread or get dispatched to worker thread | | |
); | | |
| | |
//dwContextSz should be 0 if a dword is being passed. >0 only if pointer to bloc | | |
k of that size is being passed. | | |
PWT_EVENT_BINDING | | |
APIENTRY | | |
CreateWaitEventBinding ( | | |
IN PWT_EVENT_ENTRY pee, | | |
IN WORKERFUNCTION pFunction, | | |
IN PVOID pContext, | | |
IN DWORD dwContextSz, | | |
IN BOOL bRunInServerContext | | |
); | | |
| | |
PWT_TIMER_ENTRY | | |
APIENTRY | | |
CreateWaitTimer ( | | |
IN WORKERFUNCTION pFunction, | | |
IN PVOID pContext, | | |
IN DWORD dwContextSz, | | |
IN BOOL bRunInServerContext | | |
); | | |
| | |
DWORD | | |
APIENTRY | | |
DeRegisterWaitEventBindingSelf ( | | |
IN PWT_EVENT_BINDING pwiWorkItem | | |
); | | |
| | |
DWORD | | |
APIENTRY | | |
DeRegisterWaitEventBinding ( | | |
IN PWT_EVENT_BINDING pwiWorkItem | | |
); | | |
| | |
//all the events and timers should be registered with one waitThread server | | |
//todo: change the above requirement | | |
DWORD | | |
APIENTRY | | |
DeRegisterWaitEventsTimers ( | | |
PLIST_ENTRY pLEvents, // list of events linked by ee_Links fiel | | |
d | | |
PLIST_ENTRY pLTimers // list of timers linked by te_Links field: | | |
//these lists can be a single list entry, or a multiple entry list with a | | |
list header entry. | | |
); | | |
| | |
// this should be used only when called within a server thread | | |
DWORD | | |
APIENTRY | | |
DeRegisterWaitEventsTimersSelf ( | | |
IN PLIST_ENTRY pLEvents, | | |
IN PLIST_ENTRY pLTimers | | |
); | | |
| | |
DWORD | | |
APIENTRY | | |
RegisterWaitEventBinding ( | | |
IN PWT_EVENT_BINDING pwiWorkItem | | |
); | | |
| | |
// Register the client with the wait thread | | |
DWORD | | |
APIENTRY | | |
RegisterWaitEventsTimers ( | | |
IN PLIST_ENTRY pLEventsToAdd, | | |
IN PLIST_ENTRY pLTimersToAdd | | |
); | | |
| | |
DWORD | | |
APIENTRY | | |
UpdateWaitTimer ( | | |
IN PWT_TIMER_ENTRY pte, | | |
IN LONGLONG *time | | |
); | | |
| | |
VOID | | |
APIENTRY | | |
WTFree ( | | |
PVOID ptr | | |
); | | |
| | |
//used to free wait-event. Should be deallocated using DeRegisterWaitEventsTimer | | |
s | | |
//This function is to be used only when the events have not been registered | | |
VOID | | |
APIENTRY | | |
WTFreeEvent ( | | |
IN PWT_EVENT_ENTRY peeEvent | | |
); | | |
| | |
//used to free wait-timer. Should be deallocated using DeRegisterWaitEventsTimer | | |
s | | |
//This function is to be used only when the timers have not been registered | | |
VOID | | |
APIENTRY | | |
WTFreeTimer ( | | |
IN PWT_TIMER_ENTRY pteTimer | | |
); | | |
| | |
VOID | | |
APIENTRY | | |
DebugPrintWaitWorkerThreads ( | | |
DWORD dwDebugLevel | | |
); | | |
| | |
#define DEBUGPRINT_FILTER_NONCLIENT_EVENTS 0x2 | | |
#define DEBUGPRINT_FILTER_EVENTS 0x4 | | |
#define DEBUGPRINT_FILTER_TIMERS 0x8 | | |
| | |
// | | |
//ERROR VALUES | | |
// | | |
#define ERROR_WAIT_THREAD_UNAVAILABLE 1 | | |
| | |
#define ERROR_WT_EVENT_ALREADY_DELETED 2 | | |
| | |
#define TIMER_HIGH(time) \ | | |
(((LARGE_INTEGER*)&time)->HighPart) | | |
| | |
#define TIMER_LOW(time) \ | | |
(((LARGE_INTEGER*)&time)->LowPart) | | |
| | |
#ifdef __cplusplus | | #ifdef __cplusplus |
} | | } |
#endif | | #endif |
| | |
#endif // ___ROUTING_RTUTILS_H__ | | #endif // ___ROUTING_RTUTILS_H__ |
| | |
End of changes. 15 change blocks. |
455 lines changed or deleted | | 16 lines changed or added |
|