- Implement RegisterWaitForSingleObject/Ex and UnregisterWait/Ex in stubs.c. I'm not sure where to place the exports. So ATM it is here.
- Stub RtlRegisterWait and RtlDeregisterWait/Ex.
- Import from Wine source and is LGPL.
- Ref: http://source.winehq.org/WineAPI/RtlRegisterWait.html http://source.winehq.org/WineAPI/RtlDeregisterWait.html


svn path=/trunk/; revision=32778
This commit is contained in:
James Tabor 2008-03-29 03:46:17 +00:00
parent 5b92a7951b
commit fd52a49081
3 changed files with 133 additions and 8 deletions

View file

@ -404,6 +404,8 @@ RtlDeleteSecurityObject@4
RtlDeleteTimer@12
RtlDeleteTimerQueue@4
RtlDeleteTimerQueueEx@8
RtlDeregisterWait@4
RtlDeregisterWaitEx@8
RtlDestroyAtomTable@4
RtlDestroyEnvironment@4
RtlDestroyHandleTable@4
@ -622,6 +624,7 @@ RtlRandomEx=RtlRandom@4
RtlReAllocateHeap@16
RtlRealPredecessor@4
RtlRealSuccessor@4
RtlRegisterWait@24
RtlReleasePebLock@0
RtlReleaseRelativeName@4
RtlReleaseResource@4

View file

@ -8,6 +8,10 @@
#define NDEBUG
#include <debug.h>
NTSTATUS NTAPI RtlRegisterWait(PHANDLE, HANDLE, WAITORTIMERCALLBACKFUNC, PVOID, ULONG, ULONG);
NTSTATUS NTAPI RtlDeregisterWaitEx(HANDLE, HANDLE);
NTSTATUS NTAPI RtlDeregisterWait(HANDLE);
#define STUB \
SetLastError(ERROR_CALL_NOT_IMPLEMENTED); \
@ -657,8 +661,18 @@ RegisterWaitForSingleObject(
ULONG dwFlags
)
{
STUB;
return 0;
NTSTATUS status;
// TRACE("%p %p %p %p %d %d\n",
// phNewWaitObject,hObject,Callback,Context,dwMilliseconds,dwFlags);
status = RtlRegisterWait( phNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
}
/*
@ -674,8 +688,19 @@ RegisterWaitForSingleObjectEx(
ULONG dwFlags
)
{
STUB;
return 0;
NTSTATUS status;
HANDLE hNewWaitObject;
// TRACE("%p %p %p %d %d\n",
// hObject,Callback,Context,dwMilliseconds,dwFlags);
status = RtlRegisterWait( &hNewWaitObject, hObject, Callback, Context, dwMilliseconds, dwFlags );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return NULL;
}
return hNewWaitObject;
}
/*
@ -794,8 +819,17 @@ UnregisterWait(
HANDLE WaitHandle
)
{
STUB;
return 0;
NTSTATUS status;
// TRACE("%p\n",WaitHandle);
status = RtlDeregisterWaitEx( WaitHandle, NULL );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
}
/*
@ -808,8 +842,17 @@ UnregisterWaitEx(
HANDLE CompletionEvent
)
{
STUB;
return 0;
NTSTATUS status;
// TRACE("%p\n",WaitHandle);
status = RtlDeregisterWaitEx( WaitHandle, CompletionEvent );
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
return TRUE;
}
/*

View file

@ -274,4 +274,83 @@ _NtCurrentTeb(VOID)
return NtCurrentTeb();
}
/***********************************************************************
* RtlRegisterWait
*
* Registers a wait for a handle to become signaled.
*
* PARAMS
* NewWaitObject [I] Handle to the new wait object. Use RtlDeregisterWait() to free it.
* Object [I] Object to wait to become signaled.
* Callback [I] Callback function to execute when the wait times out or the handle is signaled.
* Context [I] Context to pass to the callback function when it is executed.
* Milliseconds [I] Number of milliseconds to wait before timing out.
* Flags [I] Flags. See notes.
*
* RETURNS
* Success: STATUS_SUCCESS.
* Failure: Any NTSTATUS code.
*
* NOTES
* Flags can be one or more of the following:
*|WT_EXECUTEDEFAULT - Executes the work item in a non-I/O worker thread.
*|WT_EXECUTEINIOTHREAD - Executes the work item in an I/O worker thread.
*|WT_EXECUTEINPERSISTENTTHREAD - Executes the work item in a thread that is persistent.
*|WT_EXECUTELONGFUNCTION - Hints that the execution can take a long time.
*|WT_TRANSFER_IMPERSONATION - Executes the function with the current access token.
*/
NTSTATUS
NTAPI
RtlRegisterWait(PHANDLE NewWaitObject,
HANDLE Object,
WAITORTIMERCALLBACKFUNC Callback,
PVOID Context,
ULONG Milliseconds,
ULONG Flags)
{
return STATUS_SUCCESS;
}
/***********************************************************************
* RtlDeregisterWaitEx
*
* Cancels a wait operation and frees the resources associated with calling
* RtlRegisterWait().
*
* PARAMS
* WaitObject [I] Handle to the wait object to free.
*
* RETURNS
* Success: STATUS_SUCCESS.
* Failure: Any NTSTATUS code.
*/
NTSTATUS
NTAPI
RtlDeregisterWaitEx(HANDLE WaitHandle,
HANDLE CompletionEvent)
{
return STATUS_SUCCESS;
}
/***********************************************************************
* RtlDeregisterWait
*
* Cancels a wait operation and frees the resources associated with calling
* RtlRegisterWait().
*
* PARAMS
* WaitObject [I] Handle to the wait object to free.
*
* RETURNS
* Success: STATUS_SUCCESS.
* Failure: Any NTSTATUS code.
*/
NTSTATUS
NTAPI
RtlDeregisterWait(HANDLE WaitHandle)
{
return RtlDeregisterWaitEx(WaitHandle, NULL);
}
/* EOF */