Alexandre Julliard wrote:
Robert Shearman rob@codeweavers.com writes:
Andrey Turkin wrote:
Robert Shearman wrote:
Andrey Turkin wrote:
/******************************************************************************
BindIoCompletionCallback (KERNEL32.@)
*/ +extern NTSTATUS WINAPI RtlSetIoCompletionCallback(HANDLE,LPOVERLAPPED_COMPLETION_ROUTINE,ULONG);
This should go in winternl.h.
winternl.h may not depend on winbase.h for some reason, so this would mean either changing prototype to "(HANDLE,LPVOID,ULONG)", which seems wrong, or redefining LPOVERLAPPED_COMPLETION_ROUTINE and OVERLAPPED/LPOVERLAPPED, which seems to be too much duplication.
I think you should guard the function with an #ifdef __WINE_WINBASE_H statement, but I would wait for some other developers to chime in to get a consensus before accepting this though.
It doesn't seem right for an ntdll function to use an OVERLAPPED pointer. Shouldn't it take an IO_STATUS_BLOCK instead?
It is not used in the function itself, it is only passed to user-provided callback. So, I see several possibilities: 1) change RtlSetIoCompletionCallback to use another callback prototype, with LPVOID or ULONG_PTR or something instead of LPOVERLAPPED 2) leave callback prototype as in BindIoCompletionCallback, and protect RtlSetIoCompletionCallback with #ifdefs as Robert suggested 3) do not implement RtlSetIoCompletionCallback at all and move all code in kernel32