use crate::ntioapi::PIO_STATUS_BLOCK; use winapi::shared::ntdef::{HANDLE, LOGICAL, LONG, NTSTATUS, PLARGE_INTEGER, PVOID}; use winapi::um::winnt::{ PRTL_CRITICAL_SECTION, PTP_CALLBACK_ENVIRON, PTP_CALLBACK_INSTANCE, PTP_CLEANUP_GROUP, PTP_IO, PTP_POOL, PTP_POOL_STACK_INFORMATION, PTP_SIMPLE_CALLBACK, PTP_TIMER, PTP_TIMER_CALLBACK, PTP_WAIT, PTP_WAIT_CALLBACK, PTP_WORK, PTP_WORK_CALLBACK, }; #[repr(C)] pub struct TP_ALPC([u8; 0]); pub type PTP_ALPC = *mut TP_ALPC; FN!{stdcall PTP_ALPC_CALLBACK( Instance: PTP_CALLBACK_INSTANCE, Context: PVOID, Alpc: PTP_ALPC, ) -> ()} FN!{stdcall PTP_ALPC_CALLBACK_EX( Instanc: PTP_CALLBACK_INSTANCE, Contex: PVOID, Alp: PTP_ALPC, ApcContext: PVOID, ) -> ()} EXTERN!{extern "system" { fn TpAllocPool( PoolReturn: *mut PTP_POOL, Reserved: PVOID, ) -> NTSTATUS; fn TpReleasePool( Pool: PTP_POOL, ); fn TpSetPoolMaxThreads( Pool: PTP_POOL, MaxThreads: LONG, ); fn TpSetPoolMinThreads( Pool: PTP_POOL, MinThreads: LONG, ) -> NTSTATUS; fn TpQueryPoolStackInformation( Pool: PTP_POOL, PoolStackInformation: PTP_POOL_STACK_INFORMATION, ) -> NTSTATUS; fn TpSetPoolStackInformation( Pool: PTP_POOL, PoolStackInformation: PTP_POOL_STACK_INFORMATION, ) -> NTSTATUS; fn TpAllocCleanupGroup( CleanupGroupReturn: *mut PTP_CLEANUP_GROUP, ) -> NTSTATUS; fn TpReleaseCleanupGroup( CleanupGroup: PTP_CLEANUP_GROUP, ); fn TpReleaseCleanupGroupMembers( CleanupGroup: PTP_CLEANUP_GROUP, CancelPendingCallbacks: LOGICAL, CleanupParameter: PVOID, ); fn TpCallbackSetEventOnCompletion( Instance: PTP_CALLBACK_INSTANCE, Event: HANDLE, ); fn TpCallbackReleaseSemaphoreOnCompletion( Instance: PTP_CALLBACK_INSTANCE, Semaphore: HANDLE, ReleaseCount: LONG, ); fn TpCallbackReleaseMutexOnCompletion( Instance: PTP_CALLBACK_INSTANCE, Mutex: HANDLE, ); fn TpCallbackLeaveCriticalSectionOnCompletion( Instance: PTP_CALLBACK_INSTANCE, CriticalSection: PRTL_CRITICAL_SECTION, ); fn TpCallbackUnloadDllOnCompletion( Instance: PTP_CALLBACK_INSTANCE, DllHandle: PVOID, ); fn TpCallbackMayRunLong( Instance: PTP_CALLBACK_INSTANCE, ) -> NTSTATUS; fn TpDisassociateCallback( Instance: PTP_CALLBACK_INSTANCE, ); fn TpSimpleTryPost( Callback: PTP_SIMPLE_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpAllocWork( WorkReturn: *mut PTP_WORK, Callback: PTP_WORK_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpReleaseWork( Work: PTP_WORK, ); fn TpPostWork( Work: PTP_WORK, ); fn TpWaitForWork( Work: PTP_WORK, CancelPendingCallbacks: LOGICAL, ); fn TpAllocTimer( Timer: *mut PTP_TIMER, Callback: PTP_TIMER_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpReleaseTimer( Timer: PTP_TIMER, ); fn TpSetTimer( Timer: PTP_TIMER, DueTime: PLARGE_INTEGER, Period: LONG, WindowLength: LONG, ); fn TpIsTimerSet( Timer: PTP_TIMER, ) -> LOGICAL; fn TpWaitForTimer( Timer: PTP_TIMER, CancelPendingCallbacks: LOGICAL, ); fn TpAllocWait( WaitReturn: *mut PTP_WAIT, Callback: PTP_WAIT_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpReleaseWait( Wait: PTP_WAIT, ); fn TpSetWait( Wait: PTP_WAIT, Handle: HANDLE, Timeout: PLARGE_INTEGER, ); fn TpWaitForWait( Wait: PTP_WAIT, CancelPendingCallbacks: LOGICAL, ); }} FN!{stdcall PTP_IO_CALLBACK( Instance: PTP_CALLBACK_INSTANCE, Context: PVOID, ApcContext: PVOID, IoSB: PIO_STATUS_BLOCK, Io: PTP_IO, ) -> ()} EXTERN!{extern "system" { fn TpAllocIoCompletion( IoReturn: *mut PTP_IO, File: HANDLE, Callback: PTP_IO_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpReleaseIoCompletion( Io: PTP_IO, ); fn TpStartAsyncIoOperation( Io: PTP_IO, ); fn TpCancelAsyncIoOperation( Io: PTP_IO, ); fn TpWaitForIoCompletion( Io: PTP_IO, CancelPendingCallbacks: LOGICAL, ); fn TpAllocAlpcCompletion( AlpcReturn: *mut PTP_ALPC, AlpcPort: HANDLE, Callback: PTP_ALPC_CALLBACK, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpAllocAlpcCompletionEx( AlpcReturn: *mut PTP_ALPC, AlpcPort: HANDLE, Callback: PTP_ALPC_CALLBACK_EX, Context: PVOID, CallbackEnviron: PTP_CALLBACK_ENVIRON, ) -> NTSTATUS; fn TpReleaseAlpcCompletion( Alpc: PTP_ALPC, ); fn TpWaitForAlpcCompletion( Alpc: PTP_ALPC, ); }} ENUM!{enum TP_TRACE_TYPE { TpTraceThreadPriority = 1, TpTraceThreadAffinity = 2, MaxTpTraceType = 3, }} EXTERN!{extern "system" { fn TpCaptureCaller( Type: TP_TRACE_TYPE, ); fn TpCheckTerminateWorker( Thread: HANDLE, ); }}