Alexandre Julliard wrote: > Robert Shearman <[EMAIL PROTECTED]> 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
