20 #if (_WIN32_WINNT < 0x0600) 21 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 22 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 51 IN DWORD NumberOfConcurrentThreads)
59 NewPort = ExistingCompletionPort;
60 if (!ExistingCompletionPort)
66 NumberOfConcurrentThreads);
79 if (ExistingCompletionPort)
89 CompletionInformation.
Port = NewPort;
90 CompletionInformation.
Key = (
PVOID)CompletionKey;
93 &CompletionInformation,
100 if (!ExistingCompletionPort)
NtClose(NewPort);
129 (
PVOID*)&CompletionKey,
155 *lpCompletionKey = CompletionKey;
156 *lpNumberOfBytesTransferred =
IoStatus.Information;
176 IN DWORD dwNumberOfBytesTransferred,
184 (
PVOID)dwCompletionKey,
187 dwNumberOfBytesTransferred);
237 if (WaitStatus)
return FALSE;
241 *lpNumberOfBytesTransferred =
lpOverlapped->InternalHigh;
BOOL WINAPI BindIoCompletionCallback(IN HANDLE FileHandle, IN LPOVERLAPPED_COMPLETION_ROUTINE Function, IN ULONG Flags)
#define ERROR_INVALID_PARAMETER
VOID(* PIO_APC_ROUTINE)(IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved)
#define IO_COMPLETION_ALL_ACCESS
NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
#define STATUS_INVALID_PARAMETER
BOOL WINAPI GetQueuedCompletionStatus(IN HANDLE CompletionHandle, IN LPDWORD lpNumberOfBytesTransferred, OUT PULONG_PTR lpCompletionKey, OUT LPOVERLAPPED *lpOverlapped, IN DWORD dwMilliseconds)
#define INVALID_HANDLE_VALUE
#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS
#define ERROR_IO_INCOMPLETE
PLARGE_INTEGER WINAPI BaseFormatTimeOut(OUT PLARGE_INTEGER Timeout, IN DWORD dwMilliseconds)
BOOL WINAPI SetFileCompletionNotificationModes(IN HANDLE FileHandle, IN UCHAR Flags)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
_Must_inspect_result_ _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
#define FILE_SKIP_SET_EVENT_ON_HANDLE
NTSTATUS NTAPI NtSetIoCompletion(IN HANDLE IoCompletionPortHandle, IN PVOID CompletionKey, IN PVOID CompletionContext, IN NTSTATUS CompletionStatus, IN ULONG CompletionInformation)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
BOOL WINAPI PostQueuedCompletionStatus(IN HANDLE CompletionHandle, IN DWORD dwNumberOfBytesTransferred, IN ULONG_PTR dwCompletionKey, IN LPOVERLAPPED lpOverlapped)
NTSYSAPI NTSTATUS NTAPI RtlSetIoCompletionCallback(_In_ HANDLE FileHandle, _In_ PIO_APC_ROUTINE Callback, _In_ ULONG Flags)
void(CALLBACK * LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD, LPOVERLAPPED)
HANDLE WINAPI CreateIoCompletionPort(IN HANDLE FileHandle, IN HANDLE ExistingCompletionPort, IN ULONG_PTR CompletionKey, IN DWORD NumberOfConcurrentThreads)
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
static OUT PIO_STATUS_BLOCK IoStatusBlock
NTSTATUS NTAPI NtRemoveIoCompletion(IN HANDLE IoCompletionHandle, OUT PVOID *KeyContext, OUT PVOID *ApcContext, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER Timeout OPTIONAL)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
NTSTATUS NTAPI NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG NumberOfConcurrentThreads)
static PLARGE_INTEGER Time