From b8cd14e65a94d4c188f7c46ee4eec607a14682b9 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 22 Jan 2012 14:51:10 +0000 Subject: [PATCH] [DDK] * Update wdm.h, ntifs.h and ntddk.h to reflect the recent XDK changes. svn path=/trunk/; revision=55069 --- reactos/include/ddk/ntddk.h | 1959 +++++----- reactos/include/ddk/ntifs.h | 4413 ++++++++++++---------- reactos/include/ddk/wdm.h | 7044 ++++++++++++++++++++--------------- 3 files changed, 7655 insertions(+), 5761 deletions(-) diff --git a/reactos/include/ddk/ntddk.h b/reactos/include/ddk/ntddk.h index 22067536dcc..74d2987aa78 100644 --- a/reactos/include/ddk/ntddk.h +++ b/reactos/include/ddk/ntddk.h @@ -211,17 +211,17 @@ typedef enum _CONFIGURATION_TYPE { typedef NTSTATUS (NTAPI *PIO_QUERY_DEVICE_ROUTINE)( - IN PVOID Context, - IN PUNICODE_STRING PathName, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN PKEY_VALUE_FULL_INFORMATION *BusInformation, - IN CONFIGURATION_TYPE ControllerType, - IN ULONG ControllerNumber, - IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, - IN CONFIGURATION_TYPE PeripheralType, - IN ULONG PeripheralNumber, - IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); + _In_ PVOID Context, + _In_ PUNICODE_STRING PathName, + _In_ INTERFACE_TYPE BusType, + _In_ ULONG BusNumber, + _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation, + _In_ CONFIGURATION_TYPE ControllerType, + _In_ ULONG ControllerNumber, + _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, + _In_ CONFIGURATION_TYPE PeripheralType, + _In_ ULONG PeripheralNumber, + _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { IoQueryDeviceIdentifier = 0, @@ -232,9 +232,9 @@ typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { typedef VOID (NTAPI *PDRIVER_REINITIALIZE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN PVOID Context OPTIONAL, - IN ULONG Count); + _In_ struct _DRIVER_OBJECT *DriverObject, + _In_opt_ PVOID Context, + _In_ ULONG Count); typedef struct _CONTROLLER_OBJECT { CSHORT Type; @@ -303,10 +303,15 @@ typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { UCHAR CapabilityID; } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGET_LOCATION_STRING)( - IN OUT PVOID Context OPTIONAL, - OUT PWCHAR *LocationStrings); + _Inout_opt_ PVOID Context, + _Outptr_ + _At_(*LocationStrings, + _When_(return == 0, __drv_allocatesMem(Mem))) + PZZWSTR *LocationStrings); typedef struct _PNP_LOCATION_INTERFACE { USHORT Size; @@ -337,38 +342,38 @@ typedef struct _ARBITER_CONFLICT_INFO { } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { - IN OUT PLIST_ENTRY ArbitrationList; - IN ULONG AllocateFromCount; - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; + _Inout_ PLIST_ENTRY ArbitrationList; + _In_ ULONG AllocateFromCount; + _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { - IN OUT PLIST_ENTRY ArbitrationList; - IN ULONG AllocateFromCount; - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; + _Inout_ PLIST_ENTRY ArbitrationList; + _In_ ULONG AllocateFromCount; + _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { - IN OUT PLIST_ENTRY ArbitrationList; + _Inout_ PLIST_ENTRY ArbitrationList; } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { - OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; + _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - IN PIO_RESOURCE_DESCRIPTOR ConflictingResource; - OUT PULONG ConflictCount; - OUT PARBITER_CONFLICT_INFO *Conflicts; + _In_ PDEVICE_OBJECT PhysicalDeviceObject; + _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource; + _Out_ PULONG ConflictCount; + _Out_ PARBITER_CONFLICT_INFO *Conflicts; } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS; typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS { - IN PLIST_ENTRY ArbitrationList; + _In_ PLIST_ENTRY ArbitrationList; } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { - IN PDEVICE_OBJECT ReserveDevice; + _In_ PDEVICE_OBJECT ReserveDevice; } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS; typedef struct _ARBITER_PARAMETERS { @@ -419,9 +424,9 @@ typedef struct _ARBITER_LIST_ENTRY { typedef NTSTATUS (NTAPI *PARBITER_HANDLER)( - IN OUT PVOID Context, - IN ARBITER_ACTION Action, - IN OUT PARBITER_PARAMETERS Parameters); + _Inout_opt_ PVOID Context, + _In_ ARBITER_ACTION Action, + _Inout_ PARBITER_PARAMETERS Parameters); #define ARBITER_PARTIAL 0x00000001 @@ -442,21 +447,21 @@ typedef enum _RESOURCE_TRANSLATION_DIRECTION { typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, - IN RESOURCE_TRANSLATION_DIRECTION Direction, - IN ULONG AlternativesCount OPTIONAL, - IN IO_RESOURCE_DESCRIPTOR Alternatives[], - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); + _Inout_opt_ PVOID Context, + _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, + _In_ RESOURCE_TRANSLATION_DIRECTION Direction, + _In_opt_ ULONG AlternativesCount, + _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[], + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( - IN OUT PVOID Context OPTIONAL, - IN PIO_RESOURCE_DESCRIPTOR Source, - IN PDEVICE_OBJECT PhysicalDeviceObject, - OUT PULONG TargetCount, - OUT PIO_RESOURCE_DESCRIPTOR *Target); + _Inout_opt_ PVOID Context, + _In_ PIO_RESOURCE_DESCRIPTOR Source, + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _Out_ PULONG TargetCount, + _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target); typedef struct _TRANSLATOR_INTERFACE { USHORT Size; @@ -1025,26 +1030,26 @@ typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { typedef VOID (NTAPI *PciPin2Line)( - IN struct _BUS_HANDLER *BusHandler, - IN struct _BUS_HANDLER *RootHandler, - IN PCI_SLOT_NUMBER SlotNumber, - IN PPCI_COMMON_CONFIG PciData); + _In_ struct _BUS_HANDLER *BusHandler, + _In_ struct _BUS_HANDLER *RootHandler, + _In_ PCI_SLOT_NUMBER SlotNumber, + _In_ PPCI_COMMON_CONFIG PciData); typedef VOID (NTAPI *PciLine2Pin)( - IN struct _BUS_HANDLER *BusHandler, - IN struct _BUS_HANDLER *RootHandler, - IN PCI_SLOT_NUMBER SlotNumber, - IN PPCI_COMMON_CONFIG PciNewData, - IN PPCI_COMMON_CONFIG PciOldData); + _In_ struct _BUS_HANDLER *BusHandler, + _In_ struct _BUS_HANDLER *RootHandler, + _In_ PCI_SLOT_NUMBER SlotNumber, + _In_ PPCI_COMMON_CONFIG PciNewData, + _In_ PPCI_COMMON_CONFIG PciOldData); typedef VOID (NTAPI *PciReadWriteConfig)( - IN struct _BUS_HANDLER *BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ struct _BUS_HANDLER *BusHandler, + _In_ PCI_SLOT_NUMBER Slot, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); #define PCI_DATA_TAG ' ICP' #define PCI_DATA_VERSION 1 @@ -1065,33 +1070,33 @@ typedef struct _PCIBUSDATA { typedef ULONG (NTAPI *PCI_READ_WRITE_CONFIG)( - IN PVOID Context, - IN ULONG BusOffset, - IN ULONG Slot, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ PVOID Context, + _In_ ULONG BusOffset, + _In_ ULONG Slot, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); typedef VOID (NTAPI *PCI_PIN_TO_LINE)( - IN PVOID Context, - IN PPCI_COMMON_CONFIG PciData); + _In_ PVOID Context, + _In_ PPCI_COMMON_CONFIG PciData); typedef VOID (NTAPI *PCI_LINE_TO_PIN)( - IN PVOID Context, - IN PPCI_COMMON_CONFIG PciNewData, - IN PPCI_COMMON_CONFIG PciOldData); + _In_ PVOID Context, + _In_ PPCI_COMMON_CONFIG PciNewData, + _In_ PPCI_COMMON_CONFIG PciOldData); typedef VOID (NTAPI *PCI_ROOT_BUS_CAPABILITY)( - IN PVOID Context, - OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); + _In_ PVOID Context, + _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); typedef VOID (NTAPI *PCI_EXPRESS_WAKE_CONTROL)( - IN PVOID Context, - IN BOOLEAN EnableWake); + _In_ PVOID Context, + _In_ BOOLEAN EnableWake); typedef struct _PCI_BUS_INTERFACE_STANDARD { USHORT Size; @@ -1353,17 +1358,17 @@ typedef struct _PCI_PME_INTERFACE { typedef BOOLEAN (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( - IN ULONG Columns, - IN ULONG Rows); + _In_ ULONG Columns, + _In_ ULONG Rows); typedef PBUS_HANDLER (FASTCALL *pHalHandlerForBus)( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber); + _In_ INTERFACE_TYPE InterfaceType, + _In_ ULONG BusNumber); typedef VOID (FASTCALL *pHalReferenceBusHandler)( - IN PBUS_HANDLER BusHandler); + _In_ PBUS_HANDLER BusHandler); typedef enum _HAL_QUERY_INFORMATION_CLASS { HalInstalledBusInformation, @@ -1413,56 +1418,55 @@ typedef enum _HAL_SET_INFORMATION_CLASS { typedef NTSTATUS (NTAPI *pHalQuerySystemInformation)( - IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength); + _In_ HAL_QUERY_INFORMATION_CLASS InformationClass, + _In_ ULONG BufferSize, + _Inout_updates_bytes_to_(BufferSize, *ReturnedLength) PVOID Buffer, + _Out_ PULONG ReturnedLength); typedef NTSTATUS (NTAPI *pHalSetSystemInformation)( - IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer); + _In_ HAL_SET_INFORMATION_CLASS InformationClass, + _In_ ULONG BufferSize, + _In_ PVOID Buffer); typedef VOID (FASTCALL *pHalExamineMBR)( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG MBRTypeIdentifier, - OUT PVOID *Buffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG MBRTypeIdentifier, + _Out_ PVOID *Buffer); typedef NTSTATUS (FASTCALL *pHalIoReadPartitionTable)( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ BOOLEAN ReturnRecognizedPartitions, + _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); typedef NTSTATUS (FASTCALL *pHalIoSetPartitionInformation)( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG PartitionNumber, + _In_ ULONG PartitionType); typedef NTSTATUS (FASTCALL *pHalIoWritePartitionTable)( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG SectorsPerTrack, + _In_ ULONG NumberOfHeads, + _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); typedef NTSTATUS (NTAPI *pHalQueryBusSlots)( - IN PBUS_HANDLER BusHandler, - IN ULONG BufferSize, - OUT PULONG SlotNumbers, - OUT PULONG ReturnedLength); + _In_ PBUS_HANDLER BusHandler, + _In_ ULONG BufferSize, + _Out_ PULONG SlotNumbers, + _Out_ PULONG ReturnedLength); typedef NTSTATUS -(NTAPI *pHalInitPnpDriver)( - VOID); +(NTAPI *pHalInitPnpDriver)(VOID); typedef struct _PM_DISPATCH_TABLE { ULONG Signature; @@ -1472,69 +1476,66 @@ typedef struct _PM_DISPATCH_TABLE { typedef NTSTATUS (NTAPI *pHalInitPowerManagement)( - IN PPM_DISPATCH_TABLE PmDriverDispatchTable, - OUT PPM_DISPATCH_TABLE *PmHalDispatchTable); + _In_ PPM_DISPATCH_TABLE PmDriverDispatchTable, + _Out_ PPM_DISPATCH_TABLE *PmHalDispatchTable); typedef struct _DMA_ADAPTER* (NTAPI *pHalGetDmaAdapter)( - IN PVOID Context, - IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, - OUT PULONG NumberOfMapRegisters); + _In_ PVOID Context, + _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, + _Out_ PULONG NumberOfMapRegisters); typedef NTSTATUS (NTAPI *pHalGetInterruptTranslator)( - IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN INTERFACE_TYPE BridgeInterfaceType, - IN USHORT Size, - IN USHORT Version, - OUT PTRANSLATOR_INTERFACE Translator, - OUT PULONG BridgeBusNumber); + _In_ INTERFACE_TYPE ParentInterfaceType, + _In_ ULONG ParentBusNumber, + _In_ INTERFACE_TYPE BridgeInterfaceType, + _In_ USHORT Size, + _In_ USHORT Version, + _Out_ PTRANSLATOR_INTERFACE Translator, + _Out_ PULONG BridgeBusNumber); typedef NTSTATUS -(NTAPI *pHalStartMirroring)( - VOID); +(NTAPI *pHalStartMirroring)(VOID); typedef NTSTATUS (NTAPI *pHalEndMirroring)( - IN ULONG PassNumber); + _In_ ULONG PassNumber); typedef NTSTATUS (NTAPI *pHalMirrorPhysicalMemory)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER NumberOfBytes); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ LARGE_INTEGER NumberOfBytes); typedef NTSTATUS (NTAPI *pHalMirrorVerify)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER NumberOfBytes); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ LARGE_INTEGER NumberOfBytes); typedef BOOLEAN (NTAPI *pHalTranslateBusAddress)( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); + _In_ INTERFACE_TYPE InterfaceType, + _In_ ULONG BusNumber, + _In_ PHYSICAL_ADDRESS BusAddress, + _Inout_ PULONG AddressSpace, + _Out_ PPHYSICAL_ADDRESS TranslatedAddress); typedef NTSTATUS (NTAPI *pHalAssignSlotResources)( - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); + _In_ PUNICODE_STRING RegistryPath, + _In_opt_ PUNICODE_STRING DriverClassName, + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ INTERFACE_TYPE BusType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _Inout_ PCM_RESOURCE_LIST *AllocatedResources); typedef VOID -(NTAPI *pHalHaltSystem)( - VOID); +(NTAPI *pHalHaltSystem)(VOID); typedef BOOLEAN -(NTAPI *pHalResetDisplay)( - VOID); +(NTAPI *pHalResetDisplay)(VOID); typedef struct _MAP_REGISTER_ENTRY { PVOID MapRegister; @@ -1547,49 +1548,47 @@ typedef UCHAR typedef BOOLEAN (NTAPI *pHalFindBusAddressTranslation)( - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress, - IN OUT PULONG_PTR Context, - IN BOOLEAN NextBus); + _In_ PHYSICAL_ADDRESS BusAddress, + _Inout_ PULONG AddressSpace, + _Out_ PPHYSICAL_ADDRESS TranslatedAddress, + _Inout_ PULONG_PTR Context, + _In_ BOOLEAN NextBus); typedef VOID -(NTAPI *pHalEndOfBoot)( - VOID); +(NTAPI *pHalEndOfBoot)(VOID); typedef PVOID (NTAPI *pHalGetAcpiTable)( - IN ULONG Signature, - IN PCSTR OemId OPTIONAL, - IN PCSTR OemTableId OPTIONAL); + _In_ ULONG Signature, + _In_opt_ PCSTR OemId, + _In_opt_ PCSTR OemTableId); #if defined(_IA64_) typedef NTSTATUS (*pHalGetErrorCapList)( - IN OUT PULONG CapsListLength, - IN OUT PUCHAR ErrorCapList); + _Inout_ PULONG CapsListLength, + _Inout_updates_bytes_(*CapsListLength) PUCHAR ErrorCapList); typedef NTSTATUS (*pHalInjectError)( - IN ULONG BufferLength, - IN PUCHAR Buffer); + _In_ ULONG BufferLength, + _In_reads_bytes_(BufferLength) PUCHAR Buffer); #endif typedef VOID -(NTAPI *PCI_ERROR_HANDLER_CALLBACK)( - VOID); +(NTAPI *PCI_ERROR_HANDLER_CALLBACK)(VOID); typedef VOID (NTAPI *pHalSetPciErrorHandlerCallback)( - IN PCI_ERROR_HANDLER_CALLBACK Callback); + _In_ PCI_ERROR_HANDLER_CALLBACK Callback); #if 1 /* Not present in WDK 7600 */ typedef VOID (FASTCALL *pHalIoAssignDriveLetters)( - IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN PSTRING NtDeviceName, - OUT PUCHAR NtSystemPath, - OUT PSTRING NtSystemPathString); + _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + _In_ PSTRING NtDeviceName, + _Out_ PUCHAR NtSystemPath, + _Out_ PSTRING NtSystemPathString); #endif typedef struct { @@ -1717,10 +1716,10 @@ typedef struct _HAL_PROCESSOR_FEATURE { typedef NTSTATUS (NTAPI *PHALIOREADWRITEHANDLER)( - IN BOOLEAN fRead, - IN ULONG dwAddr, - IN ULONG dwSize, - IN OUT PULONG pdwData); + _In_ BOOLEAN fRead, + _In_ ULONG dwAddr, + _In_ ULONG dwSize, + _Inout_ PULONG pdwData); typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { ULONG BadAddrBegin; @@ -1732,17 +1731,15 @@ typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST { #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_) typedef VOID -(NTAPI *PHALMCAINTERFACELOCK)( - VOID); +(NTAPI *PHALMCAINTERFACELOCK)(VOID); typedef VOID -(NTAPI *PHALMCAINTERFACEUNLOCK)( - VOID); +(NTAPI *PHALMCAINTERFACEUNLOCK)(VOID); typedef NTSTATUS (NTAPI *PHALMCAINTERFACEREADREGISTER)( - IN UCHAR BankNumber, - IN OUT PVOID Exception); + _In_ UCHAR BankNumber, + _Inout_ PVOID Exception); typedef struct _HAL_MCA_INTERFACE { PHALMCAINTERFACELOCK Lock; @@ -1764,10 +1761,10 @@ struct _KEXCEPTION_FRAME; typedef ERROR_SEVERITY (NTAPI *PDRIVER_EXCPTN_CALLBACK)( - IN PVOID Context, - IN struct _KTRAP_FRAME *TrapFrame, - IN struct _KEXCEPTION_FRAME *ExceptionFrame, - IN PMCA_EXCEPTION Exception); + _In_ PVOID Context, + _In_ struct _KTRAP_FRAME *TrapFrame, + _In_ struct _KEXCEPTION_FRAME *ExceptionFrame, + _In_ PMCA_EXCEPTION Exception); #endif @@ -1779,8 +1776,8 @@ ERROR_SEVERITY VOID #endif (NTAPI *PDRIVER_EXCPTN_CALLBACK)( - IN PVOID Context, - IN PMCA_EXCEPTION BankLog); + _In_ PVOID Context, + _In_ PMCA_EXCEPTION BankLog); #endif typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK; @@ -1835,13 +1832,13 @@ typedef struct _HAL_ERROR_INFO { typedef VOID (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( - IN PVOID Context, - IN PCMC_EXCEPTION CmcLog); + _In_ PVOID Context, + _In_ PCMC_EXCEPTION CmcLog); typedef VOID (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( - IN PVOID Context, - IN PCPE_EXCEPTION CmcLog); + _In_ PVOID Context, + _In_ PCPE_EXCEPTION CmcLog); typedef struct _CMC_DRIVER_INFO { PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback; @@ -1861,20 +1858,20 @@ typedef struct _CPE_DRIVER_INFO { typedef NTSTATUS (*HALSENDCROSSPARTITIONIPI)( - IN USHORT ProcessorID, - IN UCHAR HardwareVector); + _In_ USHORT ProcessorID, + _In_ UCHAR HardwareVector); typedef NTSTATUS (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)( - OUT PULONG Vector, - OUT PKIRQL Irql, - IN OUT PGROUP_AFFINITY Affinity, - OUT PUCHAR HardwareVector); + _Out_ PULONG Vector, + _Out_ PKIRQL Irql, + _Inout_ PGROUP_AFFINITY Affinity, + _Out_ PUCHAR HardwareVector); typedef VOID (*HALFREECROSSPARTITIONINTERRUPTVECTOR)( - IN ULONG Vector, - IN PGROUP_AFFINITY Affinity); + _In_ ULONG Vector, + _In_ PGROUP_AFFINITY Affinity); typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE { HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi; @@ -1903,20 +1900,22 @@ typedef struct _HAL_PLATFORM_INFORMATION { ******************************************************************************/ #define NX_SUPPORT_POLICY_ALWAYSOFF 0 -#define NX_SUPPORT_POLICY_ALWAYSON 1 -#define NX_SUPPORT_POLICY_OPTIN 2 -#define NX_SUPPORT_POLICY_OPTOUT 3 +#define NX_SUPPORT_POLICY_ALWAYSON 1 +#define NX_SUPPORT_POLICY_OPTIN 2 +#define NX_SUPPORT_POLICY_OPTOUT 3 +_IRQL_requires_same_ +_Function_class_(EXPAND_STACK_CALLOUT) typedef VOID (NTAPI EXPAND_STACK_CALLOUT)( - IN PVOID Parameter OPTIONAL); + _In_opt_ PVOID Parameter); typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT; typedef VOID (NTAPI *PTIMER_APC_ROUTINE)( - IN PVOID TimerContext, - IN ULONG TimerLowValue, - IN LONG TimerHighValue); + _In_ PVOID TimerContext, + _In_ ULONG TimerLowValue, + _In_ LONG TimerHighValue); typedef enum _TIMER_SET_INFORMATION_CLASS { TimerSetCoalescableTimer, @@ -1925,13 +1924,13 @@ typedef enum _TIMER_SET_INFORMATION_CLASS { #if (NTDDI_VERSION >= NTDDI_WIN7) typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO { - IN LARGE_INTEGER DueTime; - IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL; - IN PVOID TimerContext OPTIONAL; - IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL; - IN ULONG Period OPTIONAL; - IN ULONG TolerableDelay; - OUT PBOOLEAN PreviousState OPTIONAL; + _In_ LARGE_INTEGER DueTime; + _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine; + _In_opt_ PVOID TimerContext; + _In_opt_ struct _COUNTED_REASON_CONTEXT *WakeContext; + _In_opt_ ULONG Period; + _In_ ULONG TolerableDelay; + _Out_opt_ PBOOLEAN PreviousState; } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO; #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -2120,61 +2119,60 @@ typedef struct _DEBUG_DEVICE_DESCRIPTOR { typedef NTSTATUS (NTAPI *pKdSetupPciDeviceForDebugging)( - IN PVOID LoaderBlock OPTIONAL, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); + _In_opt_ PVOID LoaderBlock, + _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); typedef NTSTATUS (NTAPI *pKdReleasePciDeviceForDebugging)( - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice); + _Inout_ PDEBUG_DEVICE_DESCRIPTOR PciDevice); typedef PVOID (NTAPI *pKdGetAcpiTablePhase0)( - IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN ULONG Signature); + _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + _In_ ULONG Signature); typedef VOID -(NTAPI *pKdCheckPowerButton)( - VOID); +(NTAPI *pKdCheckPowerButton)(VOID); #if (NTDDI_VERSION >= NTDDI_VISTA) typedef PVOID (NTAPI *pKdMapPhysicalMemory64)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ ULONG NumberPages, + _In_ BOOLEAN FlushCurrentTLB); typedef VOID (NTAPI *pKdUnmapVirtualAddress)( - IN PVOID VirtualAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB); + _In_ PVOID VirtualAddress, + _In_ ULONG NumberPages, + _In_ BOOLEAN FlushCurrentTLB); #else typedef PVOID (NTAPI *pKdMapPhysicalMemory64)( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ ULONG NumberPages); typedef VOID (NTAPI *pKdUnmapVirtualAddress)( - IN PVOID VirtualAddress, - IN ULONG NumberPages); + _In_ PVOID VirtualAddress, + _In_ ULONG NumberPages); #endif typedef ULONG (NTAPI *pKdGetPciDataByOffset)( - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); typedef ULONG (NTAPI *pKdSetPciDataByOffset)( - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); /****************************************************************************** * Memory manager Types * ******************************************************************************/ @@ -2186,9 +2184,9 @@ typedef struct _PHYSICAL_MEMORY_RANGE { typedef NTSTATUS (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( - IN PMDL DestinationMdl, - IN PMDL SourceMdl, - IN PVOID Context); + _In_ PMDL DestinationMdl, + _In_ PMDL SourceMdl, + _In_ PVOID Context); typedef enum _MM_ROTATE_DIRECTION { MmToFrameBuffer, @@ -2314,44 +2312,44 @@ typedef struct _PROCESS_ACCESS_TOKEN { #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1)) typedef struct _PROCESS_EXCEPTION_PORT { - IN HANDLE ExceptionPortHandle; - IN OUT ULONG StateFlags; + _In_ HANDLE ExceptionPortHandle; + _Inout_ ULONG StateFlags; } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT; typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( - IN HANDLE ParentId, - IN HANDLE ProcessId, - IN BOOLEAN Create); + _In_ HANDLE ParentId, + _In_ HANDLE ProcessId, + _In_ BOOLEAN Create); typedef struct _PS_CREATE_NOTIFY_INFO { - IN SIZE_T Size; + _In_ SIZE_T Size; _ANONYMOUS_UNION union { - IN ULONG Flags; + _In_ ULONG Flags; _ANONYMOUS_STRUCT struct { - IN ULONG FileOpenNameAvailable:1; - IN ULONG Reserved:31; + _In_ ULONG FileOpenNameAvailable:1; + _In_ ULONG Reserved:31; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - IN HANDLE ParentProcessId; - IN CLIENT_ID CreatingThreadId; - IN OUT struct _FILE_OBJECT *FileObject; - IN PCUNICODE_STRING ImageFileName; - IN PCUNICODE_STRING CommandLine OPTIONAL; - IN OUT NTSTATUS CreationStatus; + _In_ HANDLE ParentProcessId; + _In_ CLIENT_ID CreatingThreadId; + _Inout_ struct _FILE_OBJECT *FileObject; + _In_ PCUNICODE_STRING ImageFileName; + _In_opt_ PCUNICODE_STRING CommandLine; + _Inout_ NTSTATUS CreationStatus; } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO; typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( - IN OUT PEPROCESS Process, - IN HANDLE ProcessId, - IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL); + _Inout_ PEPROCESS Process, + _In_ HANDLE ProcessId, + _Inout_opt_ PPS_CREATE_NOTIFY_INFO CreateInfo); typedef VOID (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( - IN HANDLE ProcessId, - IN HANDLE ThreadId, - IN BOOLEAN Create); + _In_ HANDLE ProcessId, + _In_ HANDLE ThreadId, + _In_ BOOLEAN Create); #define IMAGE_ADDRESSING_MODE_32BIT 3 @@ -2380,9 +2378,9 @@ typedef struct _IMAGE_INFO_EX { typedef VOID (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( - IN PUNICODE_STRING FullImageName, - IN HANDLE ProcessId, - IN PIMAGE_INFO ImageInfo); + _In_ PUNICODE_STRING FullImageName, + _In_ HANDLE ProcessId, + _In_ PIMAGE_INFO ImageInfo); #define THREAD_CSWITCH_PMU_DISABLE FALSE #define THREAD_CSWITCH_PMU_ENABLE TRUE @@ -2666,11 +2664,13 @@ typedef union _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE; +_Function_class_(RTL_RUN_ONCE_INIT_FN) +_IRQL_requires_same_ typedef ULONG /* LOGICAL */ (NTAPI *PRTL_RUN_ONCE_INIT_FN) ( - IN OUT PRTL_RUN_ONCE RunOnce, - IN OUT PVOID Parameter OPTIONAL, - IN OUT PVOID *Context OPTIONAL); + _Inout_ PRTL_RUN_ONCE RunOnce, + _Inout_opt_ PVOID Parameter, + _Inout_opt_ PVOID *Context); #endif /* _RTL_RUN_ONCE_DEF */ @@ -2690,30 +2690,39 @@ typedef enum _RTL_GENERIC_COMPARE_RESULTS { // Forwarder struct _RTL_AVL_TABLE; +_IRQL_requires_same_ +_Function_class_(RTL_AVL_COMPARE_ROUTINE) typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_AVL_COMPARE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID FirstStruct, - IN PVOID SecondStruct); + _In_ struct _RTL_AVL_TABLE *Table, + _In_ PVOID FirstStruct, + _In_ PVOID SecondStruct); typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE; +_IRQL_requires_same_ +_Function_class_(RTL_AVL_ALLOCATE_ROUTINE) +__drv_allocatesMem(Mem) typedef PVOID (NTAPI RTL_AVL_ALLOCATE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN CLONG ByteSize); + _In_ struct _RTL_AVL_TABLE *Table, + _In_ CLONG ByteSize); typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE; +_IRQL_requires_same_ +_Function_class_(RTL_AVL_FREE_ROUTINE) typedef VOID (NTAPI RTL_AVL_FREE_ROUTINE) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID Buffer); + _In_ struct _RTL_AVL_TABLE *Table, + _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE; +_IRQL_requires_same_ +_Function_class_(RTL_AVL_MATCH_FUNCTION) typedef NTSTATUS (NTAPI RTL_AVL_MATCH_FUNCTION) ( - IN struct _RTL_AVL_TABLE *Table, - IN PVOID UserData, - IN PVOID MatchData); + _In_ struct _RTL_AVL_TABLE *Table, + _In_ PVOID UserData, + _In_ PVOID MatchData); typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION; typedef struct _RTL_BALANCED_LINKS { @@ -2748,23 +2757,30 @@ typedef struct _RTL_SPLAY_LINKS { struct _RTL_GENERIC_TABLE; +_IRQL_requires_same_ +_Function_class_(RTL_GENERIC_COMPARE_ROUTINE) typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_GENERIC_COMPARE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN PVOID FirstStruct, - IN PVOID SecondStruct); + _In_ struct _RTL_GENERIC_TABLE *Table, + _In_ PVOID FirstStruct, + _In_ PVOID SecondStruct); typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE; +_IRQL_requires_same_ +_Function_class_(RTL_GENERIC_ALLOCATE_ROUTINE) +__drv_allocatesMem(Mem) typedef PVOID (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN CLONG ByteSize); + _In_ struct _RTL_GENERIC_TABLE *Table, + _In_ CLONG ByteSize); typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE; +_IRQL_requires_same_ +_Function_class_(RTL_GENERIC_FREE_ROUTINE) typedef VOID (NTAPI RTL_GENERIC_FREE_ROUTINE) ( - IN struct _RTL_GENERIC_TABLE *Table, - IN PVOID Buffer); + _In_ struct _RTL_GENERIC_TABLE *Table, + _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE; typedef struct _RTL_GENERIC_TABLE { @@ -2803,6 +2819,8 @@ typedef struct _RTL_GENERIC_TABLE { #endif /* RTL_USE_AVL_TABLES */ +#define RTL_HASH_ALLOCATED_HEADER 0x00000001 + typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY { LIST_ENTRY Linkage; ULONG_PTR Signature; @@ -3431,20 +3449,20 @@ NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedIncrementLong( - IN OUT LONG volatile *Addend); + _Inout_ _Interlocked_operand_ LONG volatile *Addend); NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedDecrementLong( - IN PLONG Addend); + _Inout_ _Interlocked_operand_ PLONG Addend); NTKERNELAPI ULONG FASTCALL Exfi386InterlockedExchangeUlong( - IN PULONG Target, - IN ULONG Value); + _Inout_ _Interlocked_operand_ PULONG Target, + _In_ ULONG Value); #endif @@ -3454,40 +3472,44 @@ NTKERNELAPI NTSTATUS NTAPI ExExtendZone( - IN OUT PZONE_HEADER Zone, - IN OUT PVOID Segment, - IN ULONG SegmentSize); + _Inout_ PZONE_HEADER Zone, + _Inout_ PVOID Segment, + _In_ ULONG SegmentSize); NTKERNELAPI NTSTATUS NTAPI ExInitializeZone( - OUT PZONE_HEADER Zone, - IN ULONG BlockSize, - IN OUT PVOID InitialSegment, - IN ULONG InitialSegmentSize); + _Out_ PZONE_HEADER Zone, + _In_ ULONG BlockSize, + _Inout_ PVOID InitialSegment, + _In_ ULONG InitialSegmentSize); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExInterlockedExtendZone( - IN OUT PZONE_HEADER Zone, - IN OUT PVOID Segment, - IN ULONG SegmentSize, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PZONE_HEADER Zone, + _Inout_ PVOID Segment, + _In_ ULONG SegmentSize, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExUuidCreate( - OUT UUID *Uuid); + _Out_ UUID *Uuid); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseAccessViolation(VOID); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI DECLSPEC_NORETURN VOID @@ -3512,65 +3534,65 @@ NTHALAPI VOID NTAPI IoFreeAdapterChannel( - IN PADAPTER_OBJECT AdapterObject); + _In_ PADAPTER_OBJECT AdapterObject); //DECLSPEC_DEPRECATED_DDK NTHALAPI BOOLEAN NTAPI IoFlushAdapterBuffers( - IN PADAPTER_OBJECT AdapterObject, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN ULONG Length, - IN BOOLEAN WriteToDevice); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ BOOLEAN WriteToDevice); //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID NTAPI IoFreeMapRegisters( - IN PADAPTER_OBJECT AdapterObject, - IN PVOID MapRegisterBase, - IN ULONG NumberOfMapRegisters); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ PVOID MapRegisterBase, + _In_ ULONG NumberOfMapRegisters); //DECLSPEC_DEPRECATED_DDK NTHALAPI PVOID NTAPI HalAllocateCommonBuffer( - IN PADAPTER_OBJECT AdapterObject, - IN ULONG Length, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ ULONG Length, + _Out_ PPHYSICAL_ADDRESS LogicalAddress, + _In_ BOOLEAN CacheEnabled); //DECLSPEC_DEPRECATED_DDK NTHALAPI VOID NTAPI HalFreeCommonBuffer( - IN PADAPTER_OBJECT AdapterObject, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ ULONG Length, + _In_ PHYSICAL_ADDRESS LogicalAddress, + _In_ PVOID VirtualAddress, + _In_ BOOLEAN CacheEnabled); //DECLSPEC_DEPRECATED_DDK NTHALAPI ULONG NTAPI HalReadDmaCounter( - IN PADAPTER_OBJECT AdapterObject); + _In_ PADAPTER_OBJECT AdapterObject); NTHALAPI NTSTATUS NTAPI HalAllocateAdapterChannel( - IN PADAPTER_OBJECT AdapterObject, - IN PWAIT_CONTEXT_BLOCK Wcb, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ PWAIT_CONTEXT_BLOCK Wcb, + _In_ ULONG NumberOfMapRegisters, + _In_ PDRIVER_CONTROL ExecutionRoutine); #endif /* USE_DMA_MACROS ... */ @@ -3579,140 +3601,143 @@ NTHALAPI NTSTATUS NTAPI HalAssignSlotResources( - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject, - IN INTERFACE_TYPE BusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); + _In_ PUNICODE_STRING RegistryPath, + _In_opt_ PUNICODE_STRING DriverClassName, + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ INTERFACE_TYPE BusType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _Inout_ PCM_RESOURCE_LIST *AllocatedResources); +_IRQL_requires_max_(PASSIVE_LEVEL) NTHALAPI ULONG NTAPI HalGetInterruptVector( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN ULONG BusInterruptLevel, - IN ULONG BusInterruptVector, - OUT PKIRQL Irql, - OUT PKAFFINITY Affinity); + _In_ INTERFACE_TYPE InterfaceType, + _In_ ULONG BusNumber, + _In_ ULONG BusInterruptLevel, + _In_ ULONG BusInterruptVector, + _Out_ PKIRQL Irql, + _Out_ PKAFFINITY Affinity); NTHALAPI ULONG NTAPI HalSetBusData( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Length); + _In_ BUS_DATA_TYPE BusDataType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length); NTHALAPI ULONG NTAPI HalGetBusData( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Length); + _In_ BUS_DATA_TYPE BusDataType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length); NTHALAPI BOOLEAN NTAPI HalMakeBeep( - IN ULONG Frequency); + _In_ ULONG Frequency); #endif /* !defined(NO_LEGACY_DRIVERS) */ +_IRQL_requires_max_(PASSIVE_LEVEL) NTHALAPI PADAPTER_OBJECT NTAPI HalGetAdapter( - IN PDEVICE_DESCRIPTION DeviceDescription, - OUT PULONG NumberOfMapRegisters); + _In_ PDEVICE_DESCRIPTION DeviceDescription, + _Out_ PULONG NumberOfMapRegisters); VOID NTAPI HalPutDmaAdapter( - IN PADAPTER_OBJECT DmaAdapter); + _In_ PADAPTER_OBJECT DmaAdapter); NTHALAPI VOID NTAPI HalAcquireDisplayOwnership( - IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); + _In_ PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); NTHALAPI ULONG NTAPI HalGetBusDataByOffset( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ BUS_DATA_TYPE BusDataType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); NTHALAPI ULONG NTAPI HalSetBusDataByOffset( - IN BUS_DATA_TYPE BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ BUS_DATA_TYPE BusDataType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); NTHALAPI BOOLEAN NTAPI HalTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); + _In_ INTERFACE_TYPE InterfaceType, + _In_ ULONG BusNumber, + _In_ PHYSICAL_ADDRESS BusAddress, + _Inout_ PULONG AddressSpace, + _Out_ PPHYSICAL_ADDRESS TranslatedAddress); NTHALAPI PVOID NTAPI HalAllocateCrashDumpRegisters( - IN PADAPTER_OBJECT AdapterObject, - IN OUT PULONG NumberOfMapRegisters); + _In_ PADAPTER_OBJECT AdapterObject, + _Inout_ PULONG NumberOfMapRegisters); NTSTATUS NTAPI HalGetScatterGatherList( - IN PADAPTER_OBJECT DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN PMDL Mdl, - IN PVOID CurrentVa, - IN ULONG Length, - IN PDRIVER_LIST_CONTROL ExecutionRoutine, - IN PVOID Context, - IN BOOLEAN WriteToDevice); + _In_ PADAPTER_OBJECT DmaAdapter, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PMDL Mdl, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, + _In_ PVOID Context, + _In_ BOOLEAN WriteToDevice); VOID NTAPI HalPutScatterGatherList( - IN PADAPTER_OBJECT DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN BOOLEAN WriteToDevice); + _In_ PADAPTER_OBJECT DmaAdapter, + _In_ PSCATTER_GATHER_LIST ScatterGather, + _In_ BOOLEAN WriteToDevice); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID FASTCALL HalExamineMBR( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG MBRTypeIdentifier, - OUT PVOID *Buffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG MBRTypeIdentifier, + _Out_ PVOID *Buffer); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WIN7) @@ -3720,15 +3745,15 @@ HalExamineMBR( NTSTATUS NTAPI HalAllocateHardwareCounters( - IN PGROUP_AFFINITY GroupAffinty, - IN ULONG GroupCount, - IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, - OUT PHANDLE CounterSetHandle); + _In_reads_(GroupCount) PGROUP_AFFINITY GroupAffinty, + _In_ ULONG GroupCount, + _In_ PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList, + _Out_ PHANDLE CounterSetHandle); NTSTATUS NTAPI HalFreeHardwareCounters( - IN HANDLE CounterSetHandle); + _In_ HANDLE CounterSetHandle); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -3754,8 +3779,8 @@ NTHALAPI VOID NTAPI HalBugCheckSystem( - IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, - IN PWHEA_ERROR_RECORD ErrorRecord); + _In_ PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, + _In_ PWHEA_ERROR_RECORD ErrorRecord); #else @@ -3765,11 +3790,10 @@ NTHALAPI VOID NTAPI HalBugCheckSystem( - IN PWHEA_ERROR_RECORD ErrorRecord); + _In_ PWHEA_ERROR_RECORD ErrorRecord); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - /****************************************************************************** * I/O Manager Functions * ******************************************************************************/ @@ -3802,15 +3826,17 @@ IoInitializeDriverCreateContext( #if (NTDDI_VERSION >= NTDDI_WIN2K) #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoAllocateAdapterChannel( - IN PADAPTER_OBJECT AdapterObject, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG NumberOfMapRegisters, + _In_ PDRIVER_CONTROL ExecutionRoutine, + _In_ PVOID Context); #endif #if !defined(DMA_MACROS_DEFINED) @@ -3819,185 +3845,203 @@ NTHALAPI PHYSICAL_ADDRESS NTAPI IoMapTransfer( - IN PADAPTER_OBJECT AdapterObject, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice); + _In_ PADAPTER_OBJECT AdapterObject, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _Inout_ PULONG Length, + _In_ BOOLEAN WriteToDevice); #endif +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoAllocateController( - IN PCONTROLLER_OBJECT ControllerObject, - IN PDEVICE_OBJECT DeviceObject, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context OPTIONAL); + _In_ PCONTROLLER_OBJECT ControllerObject, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PDRIVER_CONTROL ExecutionRoutine, + _In_opt_ PVOID Context); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PCONTROLLER_OBJECT NTAPI IoCreateController( - IN ULONG Size); + _In_ ULONG Size); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoDeleteController( - IN PCONTROLLER_OBJECT ControllerObject); + _In_ PCONTROLLER_OBJECT ControllerObject); +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoFreeController( - IN PCONTROLLER_OBJECT ControllerObject); + _In_ PCONTROLLER_OBJECT ControllerObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation(VOID); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetDeviceToVerify( - IN PETHREAD Thread); + _In_ PETHREAD Thread); NTKERNELAPI VOID NTAPI IoCancelFileOpen( - IN PDEVICE_OBJECT DeviceObject, - IN PFILE_OBJECT FileObject); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PFILE_OBJECT FileObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PGENERIC_MAPPING NTAPI IoGetFileObjectGenericMapping(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PIRP NTAPI IoMakeAssociatedIrp( - IN PIRP Irp, - IN CCHAR StackSize); + _In_ PIRP Irp, + _In_ CCHAR StackSize); NTKERNELAPI NTSTATUS NTAPI IoQueryDeviceDescription( - IN PINTERFACE_TYPE BusType OPTIONAL, - IN PULONG BusNumber OPTIONAL, - IN PCONFIGURATION_TYPE ControllerType OPTIONAL, - IN PULONG ControllerNumber OPTIONAL, - IN PCONFIGURATION_TYPE PeripheralType OPTIONAL, - IN PULONG PeripheralNumber OPTIONAL, - IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, - IN OUT PVOID Context OPTIONAL); + _In_opt_ PINTERFACE_TYPE BusType, + _In_opt_ PULONG BusNumber, + _In_opt_ PCONFIGURATION_TYPE ControllerType, + _In_opt_ PULONG ControllerNumber, + _In_opt_ PCONFIGURATION_TYPE PeripheralType, + _In_opt_ PULONG PeripheralNumber, + _In_ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, + _Inout_opt_ PVOID Context); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI IoRaiseHardError( - IN PIRP Irp, - IN PVPB Vpb OPTIONAL, - IN PDEVICE_OBJECT RealDeviceObject); + _In_ PIRP Irp, + _In_opt_ PVPB Vpb, + _In_ PDEVICE_OBJECT RealDeviceObject); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoRaiseInformationalHardError( - IN NTSTATUS ErrorStatus, - IN PUNICODE_STRING String OPTIONAL, - IN PKTHREAD Thread OPTIONAL); + _In_ NTSTATUS ErrorStatus, + _In_opt_ PUNICODE_STRING String, + _In_opt_ PKTHREAD Thread); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoRegisterBootDriverReinitialization( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, - IN PVOID Context OPTIONAL); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, + _In_opt_ PVOID Context); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoRegisterDriverReinitialization( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, - IN PVOID Context OPTIONAL); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_REINITIALIZE DriverReinitializationRoutine, + _In_opt_ PVOID Context); NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceByPointer( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice); + _In_ PDEVICE_OBJECT SourceDevice, + _In_ PDEVICE_OBJECT TargetDevice); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoReportDetectedDevice( - IN PDRIVER_OBJECT DriverObject, - IN INTERFACE_TYPE LegacyBusType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PCM_RESOURCE_LIST ResourceList OPTIONAL, - IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, - IN BOOLEAN ResourceAssigned, - IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL); + _In_ PDRIVER_OBJECT DriverObject, + _In_ INTERFACE_TYPE LegacyBusType, + _In_ ULONG BusNumber, + _In_ ULONG SlotNumber, + _In_opt_ PCM_RESOURCE_LIST ResourceList, + _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements, + _In_ BOOLEAN ResourceAssigned, + _Inout_ PDEVICE_OBJECT *DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoReportResourceForDetection( - IN PDRIVER_OBJECT DriverObject, - IN PCM_RESOURCE_LIST DriverList OPTIONAL, - IN ULONG DriverListSize OPTIONAL, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN PCM_RESOURCE_LIST DeviceList OPTIONAL, - IN ULONG DeviceListSize OPTIONAL, - OUT PBOOLEAN ConflictDetected); + _In_ PDRIVER_OBJECT DriverObject, + _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, + _In_opt_ ULONG DriverListSize, + _In_opt_ PDEVICE_OBJECT DeviceObject, + _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, + _In_opt_ ULONG DeviceListSize, + _Out_ PBOOLEAN ConflictDetected); NTKERNELAPI NTSTATUS NTAPI IoReportResourceUsage( - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PCM_RESOURCE_LIST DriverList OPTIONAL, - IN ULONG DriverListSize OPTIONAL, - IN PDEVICE_OBJECT DeviceObject, - IN PCM_RESOURCE_LIST DeviceList OPTIONAL, - IN ULONG DeviceListSize OPTIONAL, - IN BOOLEAN OverrideConflict, - OUT PBOOLEAN ConflictDetected); + _In_opt_ PUNICODE_STRING DriverClassName, + _In_ PDRIVER_OBJECT DriverObject, + _In_reads_bytes_opt_(DriverListSize) PCM_RESOURCE_LIST DriverList, + _In_opt_ ULONG DriverListSize, + _In_opt_ PDEVICE_OBJECT DeviceObject, + _In_reads_bytes_opt_(DeviceListSize) PCM_RESOURCE_LIST DeviceList, + _In_opt_ ULONG DeviceListSize, + _In_ BOOLEAN OverrideConflict, + _Out_ PBOOLEAN ConflictDetected); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoSetHardErrorOrVerifyDevice( - IN PIRP Irp, - IN PDEVICE_OBJECT DeviceObject); + _In_ PIRP Irp, + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoAssignResources( - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL, - IN OUT PCM_RESOURCE_LIST *AllocatedResources); + _In_ PUNICODE_STRING RegistryPath, + _In_opt_ PUNICODE_STRING DriverClassName, + _In_ PDRIVER_OBJECT DriverObject, + _In_opt_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources, + _Inout_ PCM_RESOURCE_LIST *AllocatedResources); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoSetThreadHardErrorMode( - IN BOOLEAN EnableHardErrors); + _In_ BOOLEAN EnableHardErrors); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -4008,131 +4052,140 @@ NTKERNELAPI BOOLEAN NTAPI IoIsFileOriginRemote( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); NTKERNELAPI NTSTATUS NTAPI IoSetFileOrigin( - IN PFILE_OBJECT FileObject, - IN BOOLEAN Remote); + _In_ PFILE_OBJECT FileObject, + _In_ BOOLEAN Remote); #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoReadPartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ BOOLEAN ReturnRecognizedPartitions, + _Out_ struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoSetPartitionInformation( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG PartitionNumber, + _In_ ULONG PartitionType); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS FASTCALL IoWritePartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG SectorSize, + _In_ ULONG SectorsPerTrack, + _In_ ULONG NumberOfHeads, + _In_ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); NTKERNELAPI NTSTATUS NTAPI IoCreateDisk( - IN PDEVICE_OBJECT DeviceObject, - IN struct _CREATE_DISK* Disk OPTIONAL); + _In_ PDEVICE_OBJECT DeviceObject, + _In_opt_ struct _CREATE_DISK* Disk); NTKERNELAPI NTSTATUS NTAPI IoReadDiskSignature( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG BytesPerSector, - OUT PDISK_SIGNATURE Signature); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG BytesPerSector, + _Out_ PDISK_SIGNATURE Signature); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoReadPartitionTableEx( - IN PDEVICE_OBJECT DeviceObject, - OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); + _In_ PDEVICE_OBJECT DeviceObject, + _Out_ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoSetPartitionInformationEx( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG PartitionNumber, - IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG PartitionNumber, + _In_ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); NTKERNELAPI NTSTATUS NTAPI IoSetSystemPartition( - IN PUNICODE_STRING VolumeNameString); + _In_ PUNICODE_STRING VolumeNameString); NTKERNELAPI NTSTATUS NTAPI IoVerifyPartitionTable( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN FixErrors); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN FixErrors); NTKERNELAPI NTSTATUS NTAPI IoVolumeDeviceToDosName( - IN PVOID VolumeDeviceObject, - OUT PUNICODE_STRING DosName); + _In_ PVOID VolumeDeviceObject, + _Out_ _When_(return==0, + _At_(DosName->Buffer, __drv_allocatesMem(Mem))) + PUNICODE_STRING DosName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoWritePartitionTableEx( - IN PDEVICE_OBJECT DeviceObject, - IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); + _In_ PDEVICE_OBJECT DeviceObject, + _In_reads_(_Inexpressible_(FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION_EX, PartitionEntry[0]))) + struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout); NTKERNELAPI NTSTATUS NTAPI IoCreateFileSpecifyDeviceObjectHint( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PVOID DeviceObject OPTIONAL); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG Disposition, + _In_ ULONG CreateOptions, + _In_opt_ PVOID EaBuffer, + _In_ ULONG EaLength, + _In_ CREATE_FILE_TYPE CreateFileType, + _In_opt_ PVOID InternalParameters, + _In_ ULONG Options, + _In_opt_ PVOID DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice, - OUT PDEVICE_OBJECT *AttachedToDeviceObject); + _In_ PDEVICE_OBJECT SourceDevice, + _In_ PDEVICE_OBJECT TargetDevice, + _Outptr_ PDEVICE_OBJECT *AttachedToDeviceObject); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -4142,7 +4195,7 @@ NTKERNELAPI IO_PAGING_PRIORITY FASTCALL IoGetPagingIoPriority( - IN PIRP Irp); + _In_ PIRP Irp); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) @@ -4150,11 +4203,11 @@ IoGetPagingIoPriority( BOOLEAN NTAPI IoTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); + _In_ INTERFACE_TYPE InterfaceType, + _In_ ULONG BusNumber, + _In_ PHYSICAL_ADDRESS BusAddress, + _Inout_ PULONG AddressSpace, + _Out_ PPHYSICAL_ADDRESS TranslatedAddress); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -4162,56 +4215,56 @@ NTKERNELAPI NTSTATUS NTAPI IoUpdateDiskGeometry( - IN PDEVICE_OBJECT DeviceObject, - IN struct _DISK_GEOMETRY_EX* OldDiskGeometry, - IN struct _DISK_GEOMETRY_EX* NewDiskGeometry); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry, + _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry); PTXN_PARAMETER_BLOCK NTAPI IoGetTransactionParameterBlock( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); NTKERNELAPI NTSTATUS NTAPI IoCreateFileEx( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options, - IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG Disposition, + _In_ ULONG CreateOptions, + _In_opt_ PVOID EaBuffer, + _In_ ULONG EaLength, + _In_ CREATE_FILE_TYPE CreateFileType, + _In_opt_ PVOID InternalParameters, + _In_ ULONG Options, + _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext); NTSTATUS NTAPI IoSetIrpExtraCreateParameter( - IN OUT PIRP Irp, - IN struct _ECP_LIST *ExtraCreateParameter); + _Inout_ PIRP Irp, + _In_ struct _ECP_LIST *ExtraCreateParameter); VOID NTAPI IoClearIrpExtraCreateParameter( - IN OUT PIRP Irp); + _Inout_ PIRP Irp); NTSTATUS NTAPI IoGetIrpExtraCreateParameter( - IN PIRP Irp, - OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL); + _In_ PIRP Irp, + _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter); BOOLEAN NTAPI IoIsFileObjectIgnoringSharing( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -4220,7 +4273,7 @@ IoIsFileObjectIgnoringSharing( NTSTATUS NTAPI IoSetFileObjectIgnoreSharing( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -4231,20 +4284,22 @@ NTSYSAPI ULONG NTAPI DbgPrompt( - IN PCCH Prompt, - OUT PCH Response, - IN ULONG MaximumResponseLength); + _In_z_ PCCH Prompt, + _Out_writes_bytes_(MaximumResponseLength) PCH Response, + _In_ ULONG MaximumResponseLength); /****************************************************************************** * Kernel Functions * ******************************************************************************/ +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL KeInvalidateRangeAllCaches( - IN PVOID BaseAddress, - IN ULONG Length); + _In_ PVOID BaseAddress, + _In_ ULONG Length); #if (NTDDI_VERSION >= NTDDI_WIN2K) @@ -4252,29 +4307,36 @@ NTKERNELAPI VOID NTAPI KeSetImportanceDpc( - IN OUT PRKDPC Dpc, - IN KDPC_IMPORTANCE Importance); + _Inout_ PRKDPC Dpc, + _In_ KDPC_IMPORTANCE Importance); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KePulseEvent( - IN OUT PRKEVENT Event, - IN KPRIORITY Increment, - IN BOOLEAN Wait); + _Inout_ PRKEVENT Event, + _In_ KPRIORITY Increment, + _In_ BOOLEAN Wait); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeSetBasePriorityThread( - IN OUT PRKTHREAD Thread, - IN LONG Increment); + _Inout_ PRKTHREAD Thread, + _In_ LONG Increment); +_Acquires_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterCriticalRegion(VOID); +_Releases_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI @@ -4285,7 +4347,7 @@ DECLSPEC_NORETURN VOID NTAPI KeBugCheck( - IN ULONG BugCheckCode); + _In_ ULONG BugCheckCode); #if defined(SINGLE_GROUP_LEGACY_API) @@ -4293,8 +4355,8 @@ NTKERNELAPI VOID NTAPI KeSetTargetProcessorDpc( - IN OUT PRKDPC Dpc, - IN CCHAR Number); + _Inout_ PRKDPC Dpc, + _In_ CCHAR Number); NTKERNELAPI KAFFINITY @@ -4307,6 +4369,8 @@ KeQueryActiveProcessors(VOID); #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI @@ -4324,19 +4388,25 @@ KeInvalidateAllCaches(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeExpandKernelStackAndCallout( - IN PEXPAND_STACK_CALLOUT Callout, - IN PVOID Parameter OPTIONAL, - IN SIZE_T Size); + _In_ PEXPAND_STACK_CALLOUT Callout, + _In_opt_ PVOID Parameter, + _In_ SIZE_T Size); +_Acquires_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterGuardedRegion(VOID); +_Releases_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI @@ -4350,7 +4420,7 @@ NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCount( - OUT PKAFFINITY ActiveProcessors OPTIONAL); + _Out_opt_ PKAFFINITY ActiveProcessors); NTKERNELAPI ULONG @@ -4366,13 +4436,13 @@ NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCountEx( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCountEx( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI USHORT @@ -4388,27 +4458,27 @@ NTKERNELAPI KAFFINITY NTAPI KeQueryGroupAffinity( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeGetCurrentProcessorNumberEx( - OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL); + _Out_opt_ PPROCESSOR_NUMBER ProcNumber); NTKERNELAPI VOID NTAPI KeQueryNodeActiveAffinity( - IN USHORT NodeNumber, - OUT PGROUP_AFFINITY Affinity OPTIONAL, - OUT PUSHORT Count OPTIONAL); + _In_ USHORT NodeNumber, + _Out_opt_ PGROUP_AFFINITY Affinity, + _Out_opt_ PUSHORT Count); NTKERNELAPI USHORT NTAPI KeQueryNodeMaximumProcessorCount( - IN USHORT NodeNumber); + _In_ USHORT NodeNumber); NTKERNELAPI USHORT @@ -4420,37 +4490,40 @@ USHORT NTAPI KeGetCurrentNodeNumber(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryLogicalProcessorRelationship( - IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, - IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, - OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, - IN OUT PULONG Length); + _In_opt_ PPROCESSOR_NUMBER ProcessorNumber, + _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, + _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, + _Inout_ PULONG Length); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeSetHardwareCounterConfiguration( - IN PHARDWARE_COUNTER CounterArray, - IN ULONG Count); + _In_reads_(Count) PHARDWARE_COUNTER CounterArray, + _In_ ULONG Count); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryHardwareCounterConfiguration( - OUT PHARDWARE_COUNTER CounterArray, - IN ULONG MaximumCount, - OUT PULONG Count); + _Out_writes_to_(MaximumCount, *Count) PHARDWARE_COUNTER CounterArray, + _In_ ULONG MaximumCount, + _Out_ PULONG Count); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ - /****************************************************************************** * Memory manager Functions * ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI PPHYSICAL_MEMORY_RANGE NTAPI @@ -4460,170 +4533,204 @@ NTKERNELAPI PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress( - IN PVOID BaseAddress); + _In_ PVOID BaseAddress); NTKERNELAPI BOOLEAN NTAPI MmIsNonPagedSystemAddressValid( - IN PVOID VirtualAddress); + _In_ PVOID VirtualAddress); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) +_Out_writes_bytes_opt_(NumberOfBytes) NTKERNELAPI PVOID NTAPI MmAllocateNonCachedMemory( - IN SIZE_T NumberOfBytes); + _In_ SIZE_T NumberOfBytes); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmFreeNonCachedMemory( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); + _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes); NTKERNELAPI PVOID NTAPI MmGetVirtualForPhysical( - IN PHYSICAL_ADDRESS PhysicalAddress); + _In_ PHYSICAL_ADDRESS PhysicalAddress); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapUserAddressesToPage( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN PVOID PageAddress); + _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes, + _In_ PVOID PageAddress); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) +_Out_writes_bytes_opt_(NumberOfBytes) NTKERNELAPI PVOID NTAPI MmMapVideoDisplay( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ SIZE_T NumberOfBytes, + _In_ MEMORY_CACHING_TYPE CacheType); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapViewInSessionSpace( - IN PVOID Section, - OUT PVOID *MappedBase, - IN OUT PSIZE_T ViewSize); + _In_ PVOID Section, + _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, + _Inout_ PSIZE_T ViewSize); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmMapViewInSystemSpace( - IN PVOID Section, - OUT PVOID *MappedBase, - IN OUT PSIZE_T ViewSize); + _In_ PVOID Section, + _Outptr_result_bytebuffer_(*ViewSize) PVOID *MappedBase, + _Inout_ PSIZE_T ViewSize); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmIsAddressValid( - IN PVOID VirtualAddress); + _In_ PVOID VirtualAddress); NTKERNELAPI BOOLEAN NTAPI MmIsThisAnNtAsSystem(VOID); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmLockPagableSectionByHandle( - IN PVOID ImageSectionHandle); + _In_ PVOID ImageSectionHandle); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSessionSpace( - IN PVOID MappedBase); + _In_ PVOID MappedBase); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSystemSpace( - IN PVOID MappedBase); + _In_ PVOID MappedBase); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmUnsecureVirtualMemory( - IN HANDLE SecureHandle); + _In_ HANDLE SecureHandle); +_IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmRemovePhysicalMemory( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes); + _In_ PPHYSICAL_ADDRESS StartAddress, + _Inout_ PLARGE_INTEGER NumberOfBytes); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI HANDLE NTAPI MmSecureVirtualMemory( - IN PVOID Address, - IN SIZE_T Size, - IN ULONG ProbeMode); + __in_data_source(USER_MODE) _In_reads_bytes_ (Size) PVOID Address, + _In_ __in_data_source(USER_MODE) SIZE_T Size, + _In_ ULONG ProbeMode); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmUnmapVideoDisplay( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); + _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes); +_IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmAddPhysicalMemory( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes); + _In_ PPHYSICAL_ADDRESS StartAddress, + _Inout_ PLARGE_INTEGER NumberOfBytes); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS HighestAcceptableAddress); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCache( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, + _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, + _In_ MEMORY_CACHING_TYPE CacheType); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_(return != NULL, _Post_writable_byte_size_(NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCacheNode( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType, - IN NODE_REQUIREMENT PreferredNode); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, + _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, + _In_ MEMORY_CACHING_TYPE CacheType, + _In_ NODE_REQUIREMENT PreferredNode); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmFreeContiguousMemory( - IN PVOID BaseAddress); + _In_ PVOID BaseAddress); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmFreeContiguousMemorySpecifyCache( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); + _In_reads_bytes_(NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes, + _In_ MEMORY_CACHING_TYPE CacheType); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -4631,6 +4738,8 @@ MmFreeContiguousMemorySpecifyCache( #if (NTDDI_VERSION >= NTDDI_WS03) +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI @@ -4638,29 +4747,32 @@ MmCreateMirror(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTSTATUS NTAPI MmRotatePhysicalView( - IN PVOID VirtualAddress, - IN OUT PSIZE_T NumberOfBytes, - IN PMDLX NewMdl OPTIONAL, - IN MM_ROTATE_DIRECTION Direction, - IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, - IN PVOID Context OPTIONAL); + _In_ PVOID VirtualAddress, + _Inout_ PSIZE_T NumberOfBytes, + _In_opt_ PMDLX NewMdl, + _In_ MM_ROTATE_DIRECTION Direction, + _In_ PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction, + _In_opt_ PVOID Context); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ /****************************************************************************** * Process Manager Functions * ******************************************************************************/ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenProcess( - OUT PHANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN PCLIENT_ID ClientId OPTIONAL); + _Out_ PHANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PCLIENT_ID ClientId); NTSYSCALLAPI NTSTATUS @@ -4675,30 +4787,34 @@ NtQueryInformationProcess( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetCreateProcessNotifyRoutine( - IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, - IN BOOLEAN Remove); + _In_ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, + _In_ BOOLEAN Remove); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetCreateThreadNotifyRoutine( - IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); + _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsSetLoadImageNotifyRoutine( - IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); + _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); NTKERNELAPI HANDLE NTAPI PsGetCurrentProcessId(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI @@ -4715,35 +4831,39 @@ PsGetVersion( #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI PsGetProcessId( - IN PEPROCESS Process); + _In_ PEPROCESS Process); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI HANDLE NTAPI PsGetThreadId( - IN PETHREAD Thread); + _In_ PETHREAD Thread); NTKERNELAPI NTSTATUS NTAPI PsRemoveCreateThreadNotifyRoutine( - IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); + _In_ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsRemoveLoadImageNotifyRoutine( - IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); + _In_ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONGLONG NTAPI PsGetProcessCreateTimeQuadPart( - IN PEPROCESS Process); + _In_ PEPROCESS Process); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) @@ -4791,87 +4911,92 @@ NTSYSAPI VOID NTAPI RtlInitializeGenericTable( - OUT PRTL_GENERIC_TABLE Table, - IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, - IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, - IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine, - IN PVOID TableContext OPTIONAL); + _Out_ PRTL_GENERIC_TABLE Table, + _In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, + _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, + _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine, + _In_opt_ PVOID TableContext); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); + _In_ PRTL_GENERIC_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFull( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); + _In_ PRTL_GENERIC_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement, + _In_ PVOID NodeOrParent, + _In_ TABLE_SEARCH_RESULT SearchResult); NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer); + _In_ PRTL_GENERIC_TABLE Table, + _In_ PVOID Buffer); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer); + _In_ PRTL_GENERIC_TABLE Table, + _In_ PVOID Buffer); NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFull( - IN PRTL_GENERIC_TABLE Table, - IN PVOID Buffer, - OUT PVOID *NodeOrParent, - OUT TABLE_SEARCH_RESULT *SearchResult); + _In_ PRTL_GENERIC_TABLE Table, + _In_ PVOID Buffer, + _Out_ PVOID *NodeOrParent, + _Out_ TABLE_SEARCH_RESULT *SearchResult); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN BOOLEAN Restart); + _In_ PRTL_GENERIC_TABLE Table, + _In_ BOOLEAN Restart); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplaying( - IN PRTL_GENERIC_TABLE Table, - IN OUT PVOID *RestartKey); + _In_ PRTL_GENERIC_TABLE Table, + _Inout_ PVOID *RestartKey); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTable( - IN PRTL_GENERIC_TABLE Table, - IN ULONG I); + _In_ PRTL_GENERIC_TABLE Table, + _In_ ULONG I); NTSYSAPI ULONG NTAPI RtlNumberGenericTableElements( - IN PRTL_GENERIC_TABLE Table); + _In_ PRTL_GENERIC_TABLE Table); +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmpty( - IN PRTL_GENERIC_TABLE Table); + _In_ PRTL_GENERIC_TABLE Table); #endif /* !RTL_USE_AVL_TABLES */ @@ -4881,81 +5006,94 @@ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSplay( - IN OUT PRTL_SPLAY_LINKS Links); + _Inout_ PRTL_SPLAY_LINKS Links); NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlDelete( - IN PRTL_SPLAY_LINKS Links); + _In_ PRTL_SPLAY_LINKS Links); NTSYSAPI VOID NTAPI RtlDeleteNoSplay( - IN PRTL_SPLAY_LINKS Links, - IN OUT PRTL_SPLAY_LINKS *Root); + _In_ PRTL_SPLAY_LINKS Links, + _Inout_ PRTL_SPLAY_LINKS *Root); +_Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreeSuccessor( - IN PRTL_SPLAY_LINKS Links); + _In_ PRTL_SPLAY_LINKS Links); +_Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreePredecessor( - IN PRTL_SPLAY_LINKS Links); + _In_ PRTL_SPLAY_LINKS Links); +_Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealSuccessor( - IN PRTL_SPLAY_LINKS Links); + _In_ PRTL_SPLAY_LINKS Links); +_Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealPredecessor( - IN PRTL_SPLAY_LINKS Links); + _In_ PRTL_SPLAY_LINKS Links); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString( - IN PCUNICODE_STRING String1, - IN PCUNICODE_STRING String2, - IN BOOLEAN CaseInSensitive); + _In_ PCUNICODE_STRING String1, + _In_ PCUNICODE_STRING String2, + _In_ BOOLEAN CaseInSensitive); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlUpperString( - IN OUT PSTRING DestinationString, - IN const PSTRING SourceString); + _Inout_ PSTRING DestinationString, + _In_ const PSTRING SourceString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(AllocateDestinationString, _Must_inspect_result_) NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PUNICODE_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI VOID NTAPI RtlMapGenericMask( - IN OUT PACCESS_MASK AccessMask, - IN PGENERIC_MAPPING GenericMapping); + _Inout_ PACCESS_MASK AccessMask, + _In_ PGENERIC_MAPPING GenericMapping); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlVolumeDeviceToDosName( - IN PVOID VolumeDeviceObject, - OUT PUNICODE_STRING DosName); + _In_ PVOID VolumeDeviceObject, + _Out_ PUNICODE_STRING DosName); NTSYSAPI NTSTATUS @@ -4971,50 +5109,57 @@ RtlVerifyVersionInfo( IN ULONG TypeMask, IN ULONGLONG ConditionMask); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI LONG NTAPI RtlCompareString( - IN const PSTRING String1, - IN const PSTRING String2, - IN BOOLEAN CaseInSensitive); + _In_ const PSTRING String1, + _In_ const PSTRING String2, + _In_ BOOLEAN CaseInSensitive); NTSYSAPI VOID NTAPI RtlCopyString( - OUT PSTRING DestinationString, - IN const PSTRING SourceString OPTIONAL); + _Out_ PSTRING DestinationString, + _In_opt_ const PSTRING SourceString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlEqualString( - IN const PSTRING String1, - IN const PSTRING String2, - IN BOOLEAN CaseInSensitive); + _In_ const PSTRING String1, + _In_ const PSTRING String2, + _In_ BOOLEAN CaseInSensitive); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCharToInteger( - IN PCSZ String, - IN ULONG Base OPTIONAL, - OUT PULONG Value); + _In_z_ PCSZ String, + _In_opt_ ULONG Base, + _Out_ PULONG Value); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI CHAR NTAPI RtlUpperChar( - IN CHAR Character); + _In_ CHAR Character); NTSYSAPI ULONG NTAPI RtlWalkFrameChain( - OUT PVOID *Callers, - IN ULONG Count, - IN ULONG Flags); + _Out_writes_(Count - (Flags >> RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT)) + PVOID *Callers, + _In_ ULONG Count, + _In_ ULONG Flags); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -5028,107 +5173,114 @@ NTSYSAPI VOID NTAPI RtlInitializeGenericTableAvl( - OUT PRTL_AVL_TABLE Table, - IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine, - IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, - IN PRTL_AVL_FREE_ROUTINE FreeRoutine, - IN PVOID TableContext OPTIONAL); + _Out_ PRTL_AVL_TABLE Table, + _In_ PRTL_AVL_COMPARE_ROUTINE CompareRoutine, + _In_opt_ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, + _In_opt_ PRTL_AVL_FREE_ROUTINE FreeRoutine, + _In_opt_ PVOID TableContext); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL); + _In_ PRTL_AVL_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement); NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFullAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - IN CLONG BufferSize, - OUT PBOOLEAN NewElement OPTIONAL, - IN PVOID NodeOrParent, - IN TABLE_SEARCH_RESULT SearchResult); + _In_ PRTL_AVL_TABLE Table, + _In_reads_bytes_(BufferSize) PVOID Buffer, + _In_ CLONG BufferSize, + _Out_opt_ PBOOLEAN NewElement, + _In_ PVOID NodeOrParent, + _In_ TABLE_SEARCH_RESULT SearchResult); NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer); + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer); + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer); NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFullAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - OUT PVOID *NodeOrParent, - OUT TABLE_SEARCH_RESULT *SearchResult); + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer, + _Out_ PVOID *NodeOrParent, + _Out_ TABLE_SEARCH_RESULT *SearchResult); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN BOOLEAN Restart); + _In_ PRTL_AVL_TABLE Table, + _In_ BOOLEAN Restart); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplayingAvl( - IN PRTL_AVL_TABLE Table, - IN OUT PVOID *RestartKey); + _In_ PRTL_AVL_TABLE Table, + _Inout_ PVOID *RestartKey); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlLookupFirstMatchingElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN PVOID Buffer, - OUT PVOID *RestartKey); + _In_ PRTL_AVL_TABLE Table, + _In_ PVOID Buffer, + _Out_ PVOID *RestartKey); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableLikeADirectory( - IN PRTL_AVL_TABLE Table, - IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL, - IN PVOID MatchData OPTIONAL, - IN ULONG NextFlag, - IN OUT PVOID *RestartKey, - IN OUT PULONG DeleteCount, - IN PVOID Buffer); + _In_ PRTL_AVL_TABLE Table, + _In_opt_ PRTL_AVL_MATCH_FUNCTION MatchFunction, + _In_opt_ PVOID MatchData, + _In_ ULONG NextFlag, + _Inout_ PVOID *RestartKey, + _Inout_ PULONG DeleteCount, + _In_ PVOID Buffer); +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlGetElementGenericTableAvl( - IN PRTL_AVL_TABLE Table, - IN ULONG I); + _In_ PRTL_AVL_TABLE Table, + _In_ ULONG I); NTSYSAPI ULONG NTAPI RtlNumberGenericTableElementsAvl( - IN PRTL_AVL_TABLE Table); + _In_ PRTL_AVL_TABLE Table); +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmptyAvl( - IN PRTL_AVL_TABLE Table); + _In_ PRTL_AVL_TABLE Table); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -5137,46 +5289,52 @@ RtlIsGenericTableEmptyAvl( #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI VOID NTAPI RtlRunOnceInitialize( - OUT PRTL_RUN_ONCE RunOnce); + _Out_ PRTL_RUN_ONCE RunOnce); +_IRQL_requires_max_(APC_LEVEL) +_Maybe_raises_SEH_exception_ NTSYSAPI NTSTATUS NTAPI RtlRunOnceExecuteOnce( - IN OUT PRTL_RUN_ONCE RunOnce, - IN PRTL_RUN_ONCE_INIT_FN InitFn, - IN OUT PVOID Parameter OPTIONAL, - OUT PVOID *Context OPTIONAL); + _Inout_ PRTL_RUN_ONCE RunOnce, + _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn, + _Inout_opt_ PVOID Parameter, + _Outptr_opt_result_maybenull_ PVOID *Context); +_IRQL_requires_max_(APC_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlRunOnceBeginInitialize( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - OUT PVOID *Context OPTIONAL); + _Inout_ PRTL_RUN_ONCE RunOnce, + _In_ ULONG Flags, + _Outptr_opt_result_maybenull_ PVOID *Context); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlRunOnceComplete( - IN OUT PRTL_RUN_ONCE RunOnce, - IN ULONG Flags, - IN PVOID Context OPTIONAL); + _Inout_ PRTL_RUN_ONCE RunOnce, + _In_ ULONG Flags, + _In_opt_ PVOID Context); NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo( - IN ULONG OSMajorVersion, - IN ULONG OSMinorVersion, - IN ULONG SpMajorVersion, - IN ULONG SpMinorVersion, - OUT PULONG ReturnedProductType); + _In_ ULONG OSMajorVersion, + _In_ ULONG OSMinorVersion, + _In_ ULONG SpMajorVersion, + _In_ ULONG SpMinorVersion, + _Out_ PULONG ReturnedProductType); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -5184,105 +5342,112 @@ RtlGetProductInfo( #if (NTDDI_VERSION >= NTDDI_WIN7) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlCreateHashTable( - IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL, - IN ULONG Shift, - IN ULONG Flags); + _Inout_ _When_(NULL == *HashTable, __drv_allocatesMem(Mem)) + PRTL_DYNAMIC_HASH_TABLE *HashTable, + _In_ ULONG Shift, + _In_ _Reserved_ ULONG Flags); NTSYSAPI VOID NTAPI RtlDeleteHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); + _In_ _When_((HashTable->Flags & RTL_HASH_ALLOCATED_HEADER), __drv_freesMem(Mem) _Post_invalid_) + PRTL_DYNAMIC_HASH_TABLE HashTable); NTSYSAPI BOOLEAN NTAPI RtlInsertEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN ULONG_PTR Signature, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _In_ __drv_aliasesMem PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, + _In_ ULONG_PTR Signature, + _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); NTSYSAPI BOOLEAN NTAPI RtlRemoveEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _In_ PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry, + _Inout_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); +_Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlLookupEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN ULONG_PTR Signature, - OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _In_ ULONG_PTR Signature, + _Out_opt_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); +_Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlGetNextEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _In_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context); NTSYSAPI BOOLEAN NTAPI RtlInitEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); +_Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI VOID NTAPI RtlEndEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI BOOLEAN NTAPI RtlInitWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Out_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); +_Must_inspect_result_ NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlWeaklyEnumerateEntryHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI VOID NTAPI RtlEndWeakEnumerationHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable, - IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable, + _Inout_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator); NTSYSAPI BOOLEAN NTAPI RtlExpandHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); NTSYSAPI BOOLEAN NTAPI RtlContractHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable); + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -5297,9 +5462,9 @@ FORCEINLINE LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER Divisor, - OUT PLARGE_INTEGER Remainder OPTIONAL) + _In_ LARGE_INTEGER Dividend, + _In_ LARGE_INTEGER Divisor, + _Out_opt_ PLARGE_INTEGER Remainder) { LARGE_INTEGER ret; ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; @@ -5315,9 +5480,9 @@ NTSYSAPI LARGE_INTEGER NTAPI RtlLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER Divisor, - OUT PLARGE_INTEGER Remainder OPTIONAL); + _In_ LARGE_INTEGER Dividend, + _In_ LARGE_INTEGER Divisor, + _Out_opt_ PLARGE_INTEGER Remainder); #endif @@ -5393,7 +5558,7 @@ FORCEINLINE LUID NTAPI_INLINE RtlConvertLongToLuid( - IN LONG Val) + _In_ LONG Val) { LUID Luid; LARGE_INTEGER Temp; @@ -5408,7 +5573,7 @@ FORCEINLINE LUID NTAPI_INLINE RtlConvertUlongToLuid( - IN ULONG Val) + _In_ ULONG Val) { LUID Luid; @@ -5429,8 +5594,8 @@ NTSYSAPI VOID NTAPI RtlGetCallersAddress( - OUT PVOID *CallersAddress, - OUT PVOID *CallersCaller); + _Out_ PVOID *CallersAddress, + _Out_ PVOID *CallersCaller); #endif #endif @@ -5442,7 +5607,7 @@ FORCEINLINE VOID NTAPI RtlInitHashTableContext( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) + _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) { Context->ChainHead = NULL; Context->PrevLinkage = NULL; @@ -5452,8 +5617,8 @@ FORCEINLINE VOID NTAPI RtlInitHashTableContextFromEnumerator( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, - IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) + _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context, + _In_ PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator) { Context->ChainHead = Enumerator->ChainHead; Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink; @@ -5463,7 +5628,7 @@ FORCEINLINE VOID NTAPI RtlReleaseHashTableContext( - IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) + _Inout_ PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context) { UNREFERENCED_PARAMETER(Context); return; @@ -5473,7 +5638,7 @@ FORCEINLINE ULONG NTAPI RtlTotalBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->TableSize; } @@ -5482,7 +5647,7 @@ FORCEINLINE ULONG NTAPI RtlNonEmptyBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NonEmptyBuckets; } @@ -5491,7 +5656,7 @@ FORCEINLINE ULONG NTAPI RtlEmptyBucketsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->TableSize - HashTable->NonEmptyBuckets; } @@ -5500,7 +5665,7 @@ FORCEINLINE ULONG NTAPI RtlTotalEntriesHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NumEntries; } @@ -5509,7 +5674,7 @@ FORCEINLINE ULONG NTAPI RtlActiveEnumeratorsHashTable( - IN PRTL_DYNAMIC_HASH_TABLE HashTable) + _In_ PRTL_DYNAMIC_HASH_TABLE HashTable) { return HashTable->NumEnumerators; } @@ -5524,12 +5689,13 @@ RtlActiveEnumeratorsHashTable( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI SeSinglePrivilegeCheck( - IN LUID PrivilegeValue, - IN KPROCESSOR_MODE PreviousMode); + _In_ LUID PrivilegeValue, + _In_ KPROCESSOR_MODE PreviousMode); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -5539,124 +5705,138 @@ SeSinglePrivilegeCheck( ******************************************************************************/ +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwAllocateLocallyUniqueId( - OUT PLUID Luid); + _Out_ PLUID Luid); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwTerminateProcess( - IN HANDLE ProcessHandle OPTIONAL, - IN NTSTATUS ExitStatus); + _In_opt_ HANDLE ProcessHandle, + _In_ NTSTATUS ExitStatus); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenProcess( - OUT PHANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN PCLIENT_ID ClientId OPTIONAL); + _Out_ PHANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PCLIENT_ID ClientId); #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwCancelTimer( - IN HANDLE TimerHandle, - OUT PBOOLEAN CurrentState OPTIONAL); + _In_ HANDLE TimerHandle, + _Out_opt_ PBOOLEAN CurrentState); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(return == 0, __drv_allocatesMem(TimerObject)) NTSTATUS NTAPI ZwCreateTimer( - OUT PHANDLE TimerHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN TIMER_TYPE TimerType); + _Out_ PHANDLE TimerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ TIMER_TYPE TimerType); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwOpenTimer( - OUT PHANDLE TimerHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE TimerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetInformationThread( - IN HANDLE ThreadHandle, - IN THREADINFOCLASS ThreadInformationClass, - IN PVOID ThreadInformation, - IN ULONG ThreadInformationLength); + _In_ HANDLE ThreadHandle, + _In_ THREADINFOCLASS ThreadInformationClass, + _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, + _In_ ULONG ThreadInformationLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwSetTimer( - IN HANDLE TimerHandle, - IN PLARGE_INTEGER DueTime, - IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, - IN PVOID TimerContext OPTIONAL, - IN BOOLEAN ResumeTimer, - IN LONG Period OPTIONAL, - OUT PBOOLEAN PreviousState OPTIONAL); + _In_ HANDLE TimerHandle, + _In_ PLARGE_INTEGER DueTime, + _In_opt_ PTIMER_APC_ROUTINE TimerApcRoutine, + _In_opt_ PVOID TimerContext, + _In_ BOOLEAN ResumeTimer, + _In_opt_ LONG Period, + _Out_opt_ PBOOLEAN PreviousState); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDisplayString( - IN PUNICODE_STRING String); + _In_ PUNICODE_STRING String); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwPowerInformation( - IN POWER_INFORMATION_LEVEL PowerInformationLevel, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + _In_ POWER_INFORMATION_LEVEL PowerInformationLevel, + _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, + _In_ ULONG OutputBufferLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FsInformation, + _In_ ULONG Length, + _In_ FS_INFORMATION_CLASS FsInformationClass); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDeviceIoControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG IoControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG IoControlCode, + _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, + _In_ ULONG OutputBufferLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI ZwSetTimerEx( - IN HANDLE TimerHandle, - IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, - IN OUT PVOID TimerSetInformation, - IN ULONG TimerSetInformationLength); + _In_ HANDLE TimerHandle, + _In_ TIMER_SET_INFORMATION_CLASS TimerSetInformationClass, + _Inout_updates_bytes_opt_(TimerSetInformationLength) PVOID TimerSetInformation, + _In_ ULONG TimerSetInformationLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -5701,7 +5881,7 @@ typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION { typedef NTSTATUS (__cdecl *PFNFTH)( - IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); + _Inout_ PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo); typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { ULONG ProviderSignature; @@ -5712,7 +5892,7 @@ typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER { typedef ULONG_PTR (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( - IN PVOID Context); + _In_ PVOID Context); typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; @@ -5775,11 +5955,12 @@ typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { /* Filesystem runtime library routines */ #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI FsRtlIsTotalDeviceFailure( - IN NTSTATUS Status); + _In_ NTSTATUS Status); #endif #ifdef __cplusplus diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index 010c5931b32..259b93c4476 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -76,7 +76,11 @@ typedef struct _SID { UCHAR Revision; UCHAR SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; +#ifdef MIDL_PASS + [size_is(SubAuthorityCount)] ULONG SubAuthority[*]; +#else ULONG SubAuthority[ANYSIZE_ARRAY]; +#endif } SID, *PISID; #endif @@ -84,6 +88,10 @@ typedef struct _SID { #define SID_MAX_SUB_AUTHORITIES 15 #define SID_RECOMMENDED_SUB_AUTHORITIES 1 +#ifndef MIDL_PASS +#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(ULONG) + (SID_MAX_SUB_AUTHORITIES * sizeof(ULONG))) +#endif + typedef enum _SID_NAME_USE { SidTypeUser = 1, SidTypeGroup, @@ -98,7 +106,11 @@ typedef enum _SID_NAME_USE { } SID_NAME_USE, *PSID_NAME_USE; typedef struct _SID_AND_ATTRIBUTES { +#ifdef MIDL_PASS + PISID Sid; +#else PSID Sid; +#endif ULONG Attributes; } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; @@ -600,7 +612,11 @@ typedef struct _TOKEN_USER { typedef struct _TOKEN_GROUPS { ULONG GroupCount; +#ifdef MIDL_PASS + [size_is(GroupCount)] SID_AND_ATTRIBUTES Groups[*]; +#else SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; +#endif } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS; typedef struct _TOKEN_PRIVILEGES { @@ -833,20 +849,26 @@ typedef enum _OBJECT_INFORMATION_CLASS { #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information" +_Function_class_(RTL_ALLOCATE_STRING_ROUTINE) +_IRQL_requires_max_(PASSIVE_LEVEL) +__drv_allocatesMem(Mem) typedef PVOID (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)( - IN SIZE_T NumberOfBytes); + _In_ SIZE_T NumberOfBytes); #if _WIN32_WINNT >= 0x0600 +_Function_class_(RTL_REALLOCATE_STRING_ROUTINE) +_IRQL_requires_max_(PASSIVE_LEVEL) +__drv_allocatesMem(Mem) typedef PVOID (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)( - IN SIZE_T NumberOfBytes, + _In_ SIZE_T NumberOfBytes, IN PVOID Buffer); #endif typedef VOID (NTAPI *PRTL_FREE_STRING_ROUTINE)( - IN PVOID Buffer); + _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer); extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine; extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine; @@ -855,11 +877,13 @@ extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine; extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine; #endif +_Function_class_(RTL_HEAP_COMMIT_ROUTINE) +_IRQL_requires_same_ typedef NTSTATUS -(NTAPI * PRTL_HEAP_COMMIT_ROUTINE) ( - IN PVOID Base, - IN OUT PVOID *CommitAddress, - IN OUT PSIZE_T CommitSize); +(NTAPI *PRTL_HEAP_COMMIT_ROUTINE) ( + _In_ PVOID Base, + _Inout_ PVOID *CommitAddress, + _Inout_ PSIZE_T CommitSize); typedef struct _RTL_HEAP_PARAMETERS { ULONG Length; @@ -880,9 +904,9 @@ typedef struct _RTL_HEAP_PARAMETERS { typedef struct _GENERATE_NAME_CONTEXT { USHORT Checksum; BOOLEAN CheckSumInserted; - UCHAR NameLength; + _Field_range_(<=, 8) UCHAR NameLength; WCHAR NameBuffer[8]; - ULONG ExtensionLength; + _Field_range_(<=, 4) ULONG ExtensionLength; WCHAR ExtensionBuffer[4]; ULONG LastIndexValue; } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT; @@ -938,553 +962,650 @@ typedef struct _COMPRESSED_DATA_INFO { #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ +_Ret_maybenull_ +_Post_writable_byte_size_(Size) NTSYSAPI PVOID NTAPI RtlAllocateHeap( - IN HANDLE HeapHandle, - IN ULONG Flags OPTIONAL, - IN SIZE_T Size); + _In_ HANDLE HeapHandle, + _In_opt_ ULONG Flags, + _In_ SIZE_T Size); +_Success_(return != 0) NTSYSAPI BOOLEAN NTAPI RtlFreeHeap( - IN PVOID HeapHandle, - IN ULONG Flags OPTIONAL, - IN PVOID BaseAddress); + _In_ PVOID HeapHandle, + _In_opt_ ULONG Flags, + _In_ _Post_invalid_ PVOID BaseAddress); NTSYSAPI VOID NTAPI RtlCaptureContext( - OUT PCONTEXT ContextRecord); + _Out_ PCONTEXT ContextRecord); +_Ret_range_(<, MAXLONG) NTSYSAPI ULONG NTAPI RtlRandom( - IN OUT PULONG Seed); + _Inout_ PULONG Seed); +_IRQL_requires_max_(APC_LEVEL) +_Success_(return != 0) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString( - OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString); + _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)) + PUNICODE_STRING DestinationString, + _In_z_ PCWSTR SourceString); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlAppendStringToString( - IN OUT PSTRING Destination, - IN const STRING *Source); + _Inout_ PSTRING Destination, + _In_ const STRING *Source); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlOemStringToUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCOEM_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PUNICODE_STRING DestinationString, + _In_ PCOEM_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString( - IN OUT POEM_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + POEM_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeStringToOemString( - IN OUT POEM_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + POEM_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlOemStringToCountedUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCOEM_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PUNICODE_STRING DestinationString, + _In_ PCOEM_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToCountedOemString( - IN OUT POEM_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + POEM_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeStringToCountedOemString( - IN OUT POEM_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + POEM_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(AllocateDestinationString, _Must_inspect_result_) NTSYSAPI NTSTATUS NTAPI RtlDowncaseUnicodeString( - IN OUT PUNICODE_STRING UniDest, - IN PCUNICODE_STRING UniSource, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(UniDest->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PUNICODE_STRING UniDest, + _In_ PCUNICODE_STRING UniSource, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI -RtlFreeOemString ( - IN OUT POEM_STRING OemString); +RtlFreeOemString( + _Inout_ _At_(OemString->Buffer, __drv_freesMem(Mem)) POEM_STRING OemString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI ULONG NTAPI RtlxUnicodeStringToOemSize( - IN PCUNICODE_STRING UnicodeString); + _In_ PCUNICODE_STRING UnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI ULONG NTAPI RtlxOemStringToUnicodeSize( - IN PCOEM_STRING OemString); + _In_ PCOEM_STRING OemString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlMultiByteToUnicodeN( - OUT PWCH UnicodeString, - IN ULONG MaxBytesInUnicodeString, - OUT PULONG BytesInUnicodeString OPTIONAL, - IN const CHAR *MultiByteString, - IN ULONG BytesInMultiByteString); + _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString, + _In_ ULONG MaxBytesInUnicodeString, + _Out_opt_ PULONG BytesInUnicodeString, + _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString, + _In_ ULONG BytesInMultiByteString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlMultiByteToUnicodeSize( - OUT PULONG BytesInUnicodeString, - IN const CHAR *MultiByteString, - IN ULONG BytesInMultiByteString); + _Out_ PULONG BytesInUnicodeString, + _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString, + _In_ ULONG BytesInMultiByteString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUnicodeToMultiByteSize( - OUT PULONG BytesInMultiByteString, - IN PCWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _Out_ PULONG BytesInMultiByteString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUnicodeToMultiByteN( - OUT PCHAR MultiByteString, - IN ULONG MaxBytesInMultiByteString, - OUT PULONG BytesInMultiByteString OPTIONAL, - IN PWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString, + _In_ ULONG MaxBytesInMultiByteString, + _Out_opt_ PULONG BytesInMultiByteString, + _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeToMultiByteN( - OUT PCHAR MultiByteString, - IN ULONG MaxBytesInMultiByteString, - OUT PULONG BytesInMultiByteString OPTIONAL, - IN PCWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString, + _In_ ULONG MaxBytesInMultiByteString, + _Out_opt_ PULONG BytesInMultiByteString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlOemToUnicodeN( - OUT PWSTR UnicodeString, - IN ULONG MaxBytesInUnicodeString, - OUT PULONG BytesInUnicodeString OPTIONAL, - IN PCCH OemString, - IN ULONG BytesInOemString); + _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWSTR UnicodeString, + _In_ ULONG MaxBytesInUnicodeString, + _Out_opt_ PULONG BytesInUnicodeString, + _In_reads_bytes_(BytesInOemString) PCCH OemString, + _In_ ULONG BytesInOemString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUnicodeToOemN( - OUT PCHAR OemString, - IN ULONG MaxBytesInOemString, - OUT PULONG BytesInOemString OPTIONAL, - IN PCWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _Out_writes_bytes_to_(MaxBytesInOemString, *BytesInOemString) PCHAR OemString, + _In_ ULONG MaxBytesInOemString, + _Out_opt_ PULONG BytesInOemString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeToOemN( - OUT PCHAR OemString, - IN ULONG MaxBytesInOemString, - OUT PULONG BytesInOemString OPTIONAL, - IN PCWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _Out_writes_bytes_to_(MaxBytesInOemString, *BytesInOemString) PCHAR OemString, + _In_ ULONG MaxBytesInOemString, + _Out_opt_ PULONG BytesInOemString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); #if (NTDDI_VERSION >= NTDDI_VISTASP1) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlGenerate8dot3Name( - IN PCUNICODE_STRING Name, - IN BOOLEAN AllowExtendedCharacters, - IN OUT PGENERATE_NAME_CONTEXT Context, - IN OUT PUNICODE_STRING Name8dot3); + _In_ PCUNICODE_STRING Name, + _In_ BOOLEAN AllowExtendedCharacters, + _Inout_ PGENERATE_NAME_CONTEXT Context, + _Inout_ PUNICODE_STRING Name8dot3); #else +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlGenerate8dot3Name( - IN PCUNICODE_STRING Name, - IN BOOLEAN AllowExtendedCharacters, - IN OUT PGENERATE_NAME_CONTEXT Context, - IN OUT PUNICODE_STRING Name8dot3); + _In_ PCUNICODE_STRING Name, + _In_ BOOLEAN AllowExtendedCharacters, + _Inout_ PGENERATE_NAME_CONTEXT Context, + _Inout_ PUNICODE_STRING Name8dot3); #endif +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsNameLegalDOS8Dot3( - IN PCUNICODE_STRING Name, - IN OUT POEM_STRING OemName OPTIONAL, - IN OUT PBOOLEAN NameContainsSpaces OPTIONAL); + _In_ PCUNICODE_STRING Name, + _Inout_opt_ POEM_STRING OemName, + _Out_opt_ PBOOLEAN NameContainsSpaces); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlIsValidOemCharacter( - IN OUT PWCHAR Char); + _Inout_ PWCHAR Char); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI PfxInitialize( - OUT PPREFIX_TABLE PrefixTable); + _Out_ PPREFIX_TABLE PrefixTable); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI BOOLEAN NTAPI PfxInsertPrefix( - IN PPREFIX_TABLE PrefixTable, - IN PSTRING Prefix, - OUT PPREFIX_TABLE_ENTRY PrefixTableEntry); + _In_ PPREFIX_TABLE PrefixTable, + _In_ __drv_aliasesMem PSTRING Prefix, + _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI PfxRemovePrefix( - IN PPREFIX_TABLE PrefixTable, - IN PPREFIX_TABLE_ENTRY PrefixTableEntry); + _In_ PPREFIX_TABLE PrefixTable, + _In_ PPREFIX_TABLE_ENTRY PrefixTableEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI PPREFIX_TABLE_ENTRY NTAPI PfxFindPrefix( - IN PPREFIX_TABLE PrefixTable, - IN PSTRING FullName); + _In_ PPREFIX_TABLE PrefixTable, + _In_ PSTRING FullName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlInitializeUnicodePrefix( - OUT PUNICODE_PREFIX_TABLE PrefixTable); + _Out_ PUNICODE_PREFIX_TABLE PrefixTable); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI BOOLEAN NTAPI RtlInsertUnicodePrefix( - IN PUNICODE_PREFIX_TABLE PrefixTable, - IN PUNICODE_STRING Prefix, - OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); + _In_ PUNICODE_PREFIX_TABLE PrefixTable, + _In_ __drv_aliasesMem PUNICODE_STRING Prefix, + _Out_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlRemoveUnicodePrefix( - IN PUNICODE_PREFIX_TABLE PrefixTable, - IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); + _In_ PUNICODE_PREFIX_TABLE PrefixTable, + _In_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI PUNICODE_PREFIX_TABLE_ENTRY NTAPI RtlFindUnicodePrefix( - IN PUNICODE_PREFIX_TABLE PrefixTable, - IN PUNICODE_STRING FullName, - IN ULONG CaseInsensitiveIndex); + _In_ PUNICODE_PREFIX_TABLE PrefixTable, + _In_ PUNICODE_STRING FullName, + _In_ ULONG CaseInsensitiveIndex); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI PUNICODE_PREFIX_TABLE_ENTRY NTAPI RtlNextUnicodePrefix( - IN PUNICODE_PREFIX_TABLE PrefixTable, - IN BOOLEAN Restart); + _In_ PUNICODE_PREFIX_TABLE PrefixTable, + _In_ BOOLEAN Restart); +_Must_inspect_result_ NTSYSAPI SIZE_T NTAPI RtlCompareMemoryUlong( - IN PVOID Source, - IN SIZE_T Length, - IN ULONG Pattern); + _In_reads_bytes_(Length) PVOID Source, + _In_ SIZE_T Length, + _In_ ULONG Pattern); +_Success_(return != 0) NTSYSAPI BOOLEAN NTAPI RtlTimeToSecondsSince1980( - IN PLARGE_INTEGER Time, - OUT PULONG ElapsedSeconds); + _In_ PLARGE_INTEGER Time, + _Out_ PULONG ElapsedSeconds); NTSYSAPI VOID NTAPI RtlSecondsSince1980ToTime( - IN ULONG ElapsedSeconds, - OUT PLARGE_INTEGER Time); + _In_ ULONG ElapsedSeconds, + _Out_ PLARGE_INTEGER Time); +_Success_(return != 0) NTSYSAPI BOOLEAN NTAPI RtlTimeToSecondsSince1970( - IN PLARGE_INTEGER Time, - OUT PULONG ElapsedSeconds); + _In_ PLARGE_INTEGER Time, + _Out_ PULONG ElapsedSeconds); NTSYSAPI VOID NTAPI RtlSecondsSince1970ToTime( - IN ULONG ElapsedSeconds, - OUT PLARGE_INTEGER Time); + _In_ ULONG ElapsedSeconds, + _Out_ PLARGE_INTEGER Time); +_IRQL_requires_max_(APC_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlValidSid( - IN PSID Sid); + _In_ PSID Sid); +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlEqualSid( - IN PSID Sid1, - IN PSID Sid2); + _In_ PSID Sid1, + _In_ PSID Sid2); +_IRQL_requires_max_(APC_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlEqualPrefixSid( - IN PSID Sid1, - IN PSID Sid2); + _In_ PSID Sid1, + _In_ PSID Sid2); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI ULONG NTAPI RtlLengthRequiredSid( - IN ULONG SubAuthorityCount); + _In_ ULONG SubAuthorityCount); NTSYSAPI PVOID NTAPI RtlFreeSid( - IN PSID Sid); + _In_ _Post_invalid_ PSID Sid); +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlAllocateAndInitializeSid( - IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, - IN UCHAR SubAuthorityCount, - IN ULONG SubAuthority0, - IN ULONG SubAuthority1, - IN ULONG SubAuthority2, - IN ULONG SubAuthority3, - IN ULONG SubAuthority4, - IN ULONG SubAuthority5, - IN ULONG SubAuthority6, - IN ULONG SubAuthority7, - OUT PSID *Sid); + _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + _In_ UCHAR SubAuthorityCount, + _In_ ULONG SubAuthority0, + _In_ ULONG SubAuthority1, + _In_ ULONG SubAuthority2, + _In_ ULONG SubAuthority3, + _In_ ULONG SubAuthority4, + _In_ ULONG SubAuthority5, + _In_ ULONG SubAuthority6, + _In_ ULONG SubAuthority7, + _Outptr_ PSID *Sid); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlInitializeSid( - OUT PSID Sid, - IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, - IN UCHAR SubAuthorityCount); + _Out_ PSID Sid, + _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + _In_ UCHAR SubAuthorityCount); NTSYSAPI PULONG NTAPI RtlSubAuthoritySid( - IN PSID Sid, - IN ULONG SubAuthority); + _In_ PSID Sid, + _In_ ULONG SubAuthority); +_Post_satisfies_(return >= 8 && return <= SECURITY_MAX_SID_SIZE) NTSYSAPI ULONG NTAPI RtlLengthSid( - IN PSID Sid); + _In_ PSID Sid); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCopySid( - IN ULONG Length, - IN PSID Destination, - IN PSID Source); + _In_ ULONG Length, + _Out_writes_bytes_(Length) PSID Destination, + _In_ PSID Source); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlConvertSidToUnicodeString( - IN OUT PUNICODE_STRING UnicodeString, - IN PSID Sid, - IN BOOLEAN AllocateDestinationString); + _Inout_ PUNICODE_STRING UnicodeString, + _In_ PSID Sid, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI VOID NTAPI RtlCopyLuid( - OUT PLUID DestinationLuid, - IN PLUID SourceLuid); + _Out_ PLUID DestinationLuid, + _In_ PLUID SourceLuid); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCreateAcl( - OUT PACL Acl, - IN ULONG AclLength, - IN ULONG AclRevision); + _Out_writes_bytes_(AclLength) PACL Acl, + _In_ ULONG AclLength, + _In_ ULONG AclRevision); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlAddAce( - IN OUT PACL Acl, - IN ULONG AceRevision, - IN ULONG StartingAceIndex, - IN PVOID AceList, - IN ULONG AceListLength); + _Inout_ PACL Acl, + _In_ ULONG AceRevision, + _In_ ULONG StartingAceIndex, + _In_reads_bytes_(AceListLength) PVOID AceList, + _In_ ULONG AceListLength); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDeleteAce( - IN OUT PACL Acl, - IN ULONG AceIndex); + _Inout_ PACL Acl, + _In_ ULONG AceIndex); NTSYSAPI NTSTATUS NTAPI RtlGetAce( - IN PACL Acl, - IN ULONG AceIndex, - OUT PVOID *Ace); + _In_ PACL Acl, + _In_ ULONG AceIndex, + _Outptr_ PVOID *Ace); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlAddAccessAllowedAce( - IN OUT PACL Acl, - IN ULONG AceRevision, - IN ACCESS_MASK AccessMask, - IN PSID Sid); + _Inout_ PACL Acl, + _In_ ULONG AceRevision, + _In_ ACCESS_MASK AccessMask, + _In_ PSID Sid); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlAddAccessAllowedAceEx( - IN OUT PACL Acl, - IN ULONG AceRevision, - IN ULONG AceFlags, - IN ACCESS_MASK AccessMask, - IN PSID Sid); + _Inout_ PACL Acl, + _In_ ULONG AceRevision, + _In_ ULONG AceFlags, + _In_ ACCESS_MASK AccessMask, + _In_ PSID Sid); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptorRelative( - OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor, - IN ULONG Revision); + _Out_ PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor, + _In_ ULONG Revision); NTSYSAPI NTSTATUS NTAPI RtlGetDaclSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - OUT PBOOLEAN DaclPresent, - OUT PACL *Dacl, - OUT PBOOLEAN DaclDefaulted); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PBOOLEAN DaclPresent, + _Out_ PACL *Dacl, + _Out_ PBOOLEAN DaclDefaulted); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlSetOwnerSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID Owner OPTIONAL, - IN BOOLEAN OwnerDefaulted); + _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSID Owner, + _In_opt_ BOOLEAN OwnerDefaulted); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlGetOwnerSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - OUT PSID *Owner, - OUT PBOOLEAN OwnerDefaulted); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PSID *Owner, + _Out_ PBOOLEAN OwnerDefaulted); +_IRQL_requires_max_(APC_LEVEL) +_When_(Status < 0, _Out_range_(>, 0)) +_When_(Status >= 0, _Out_range_(==, 0)) NTSYSAPI ULONG NTAPI RtlNtStatusToDosError( - IN NTSTATUS Status); + _In_ NTSTATUS Status); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCustomCPToUnicodeN( - IN PCPTABLEINFO CustomCP, - OUT PWCH UnicodeString, - IN ULONG MaxBytesInUnicodeString, - OUT PULONG BytesInUnicodeString OPTIONAL, - IN PCH CustomCPString, - IN ULONG BytesInCustomCPString); + _In_ PCPTABLEINFO CustomCP, + _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString, + _In_ ULONG MaxBytesInUnicodeString, + _Out_opt_ PULONG BytesInUnicodeString, + _In_reads_bytes_(BytesInCustomCPString) PCH CustomCPString, + _In_ ULONG BytesInCustomCPString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUnicodeToCustomCPN( - IN PCPTABLEINFO CustomCP, - OUT PCH CustomCPString, - IN ULONG MaxBytesInCustomCPString, - OUT PULONG BytesInCustomCPString OPTIONAL, - IN PWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _In_ PCPTABLEINFO CustomCP, + _Out_writes_bytes_to_(MaxBytesInCustomCPString, *BytesInCustomCPString) PCH CustomCPString, + _In_ ULONG MaxBytesInCustomCPString, + _Out_opt_ PULONG BytesInCustomCPString, + _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeToCustomCPN( - IN PCPTABLEINFO CustomCP, - OUT PCH CustomCPString, - IN ULONG MaxBytesInCustomCPString, - OUT PULONG BytesInCustomCPString OPTIONAL, - IN PWCH UnicodeString, - IN ULONG BytesInUnicodeString); + _In_ PCPTABLEINFO CustomCP, + _Out_writes_bytes_to_(MaxBytesInCustomCPString, *BytesInCustomCPString) PCH CustomCPString, + _In_ ULONG MaxBytesInCustomCPString, + _Out_opt_ PULONG BytesInCustomCPString, + _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString, + _In_ ULONG BytesInUnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlInitCodePageTable( - IN PUSHORT TableBase, - IN OUT PCPTABLEINFO CodePageTable); + _In_ PUSHORT TableBase, + _Inout_ PCPTABLEINFO CodePageTable); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -1494,181 +1615,197 @@ RtlInitCodePageTable( +_Must_inspect_result_ NTSYSAPI PVOID NTAPI RtlCreateHeap( - IN ULONG Flags, - IN PVOID HeapBase OPTIONAL, - IN SIZE_T ReserveSize OPTIONAL, - IN SIZE_T CommitSize OPTIONAL, - IN PVOID Lock OPTIONAL, - IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL); + _In_ ULONG Flags, + _In_opt_ PVOID HeapBase, + _In_opt_ SIZE_T ReserveSize, + _In_opt_ SIZE_T CommitSize, + _In_opt_ PVOID Lock, + _In_opt_ PRTL_HEAP_PARAMETERS Parameters); NTSYSAPI PVOID NTAPI RtlDestroyHeap( - IN PVOID HeapHandle); + _In_ _Post_invalid_ PVOID HeapHandle); NTSYSAPI USHORT NTAPI RtlCaptureStackBackTrace( - IN ULONG FramesToSkip, - IN ULONG FramesToCapture, - OUT PVOID *BackTrace, - OUT PULONG BackTraceHash OPTIONAL); + _In_ ULONG FramesToSkip, + _In_ ULONG FramesToCapture, + _Out_writes_to_(FramesToCapture, return) PVOID *BackTrace, + _Out_opt_ PULONG BackTraceHash); +_Ret_range_(<, MAXLONG) NTSYSAPI ULONG NTAPI RtlRandomEx( - IN OUT PULONG Seed); + _Inout_ PULONG Seed); +_IRQL_requires_max_(DISPATCH_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlInitUnicodeStringEx( - OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString OPTIONAL); + _Out_ PUNICODE_STRING DestinationString, + _In_opt_z_ __drv_aliasesMem PCWSTR SourceString); +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlValidateUnicodeString( - IN ULONG Flags, - IN PCUNICODE_STRING String); + _In_ ULONG Flags, + _In_ PCUNICODE_STRING String); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlDuplicateUnicodeString( - IN ULONG Flags, - IN PCUNICODE_STRING SourceString, - OUT PUNICODE_STRING DestinationString); + _In_ ULONG Flags, + _In_ PCUNICODE_STRING SourceString, + _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)) PUNICODE_STRING DestinationString); NTSYSAPI NTSTATUS NTAPI RtlGetCompressionWorkSpaceSize( - IN USHORT CompressionFormatAndEngine, - OUT PULONG CompressBufferWorkSpaceSize, - OUT PULONG CompressFragmentWorkSpaceSize); + _In_ USHORT CompressionFormatAndEngine, + _Out_ PULONG CompressBufferWorkSpaceSize, + _Out_ PULONG CompressFragmentWorkSpaceSize); NTSYSAPI NTSTATUS NTAPI RtlCompressBuffer( - IN USHORT CompressionFormatAndEngine, - IN PUCHAR UncompressedBuffer, - IN ULONG UncompressedBufferSize, - OUT PUCHAR CompressedBuffer, - IN ULONG CompressedBufferSize, - IN ULONG UncompressedChunkSize, - OUT PULONG FinalCompressedSize, - IN PVOID WorkSpace); + _In_ USHORT CompressionFormatAndEngine, + _In_reads_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _Out_writes_bytes_to_(CompressedBufferSize, *FinalCompressedSize) PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _In_ ULONG UncompressedChunkSize, + _Out_ PULONG FinalCompressedSize, + _In_ PVOID WorkSpace); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDecompressBuffer( - IN USHORT CompressionFormat, - OUT PUCHAR UncompressedBuffer, - IN ULONG UncompressedBufferSize, - IN PUCHAR CompressedBuffer, - IN ULONG CompressedBufferSize, - OUT PULONG FinalUncompressedSize); + _In_ USHORT CompressionFormat, + _Out_writes_bytes_to_(UncompressedBufferSize, *FinalUncompressedSize) PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _Out_ PULONG FinalUncompressedSize); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDecompressFragment( - IN USHORT CompressionFormat, - OUT PUCHAR UncompressedFragment, - IN ULONG UncompressedFragmentSize, - IN PUCHAR CompressedBuffer, - IN ULONG CompressedBufferSize, - IN ULONG FragmentOffset, - OUT PULONG FinalUncompressedSize, - IN PVOID WorkSpace); + _In_ USHORT CompressionFormat, + _Out_writes_bytes_to_(UncompressedFragmentSize, *FinalUncompressedSize) PUCHAR UncompressedFragment, + _In_ ULONG UncompressedFragmentSize, + _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _In_range_(<, CompressedBufferSize) ULONG FragmentOffset, + _Out_ PULONG FinalUncompressedSize, + _In_ PVOID WorkSpace); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDescribeChunk( - IN USHORT CompressionFormat, - IN OUT PUCHAR *CompressedBuffer, - IN PUCHAR EndOfCompressedBufferPlus1, - OUT PUCHAR *ChunkBuffer, - OUT PULONG ChunkSize); + _In_ USHORT CompressionFormat, + _Inout_ PUCHAR *CompressedBuffer, + _In_ PUCHAR EndOfCompressedBufferPlus1, + _Out_ PUCHAR *ChunkBuffer, + _Out_ PULONG ChunkSize); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlReserveChunk( - IN USHORT CompressionFormat, - IN OUT PUCHAR *CompressedBuffer, - IN PUCHAR EndOfCompressedBufferPlus1, - OUT PUCHAR *ChunkBuffer, - IN ULONG ChunkSize); + _In_ USHORT CompressionFormat, + _Inout_ PUCHAR *CompressedBuffer, + _In_ PUCHAR EndOfCompressedBufferPlus1, + _Out_ PUCHAR *ChunkBuffer, + _In_ ULONG ChunkSize); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDecompressChunks( - OUT PUCHAR UncompressedBuffer, - IN ULONG UncompressedBufferSize, - IN PUCHAR CompressedBuffer, - IN ULONG CompressedBufferSize, - IN PUCHAR CompressedTail, - IN ULONG CompressedTailSize, - IN PCOMPRESSED_DATA_INFO CompressedDataInfo); + _Out_writes_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer, + _In_ ULONG CompressedBufferSize, + _In_reads_bytes_(CompressedTailSize) PUCHAR CompressedTail, + _In_ ULONG CompressedTailSize, + _In_ PCOMPRESSED_DATA_INFO CompressedDataInfo); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCompressChunks( - IN PUCHAR UncompressedBuffer, - IN ULONG UncompressedBufferSize, - OUT PUCHAR CompressedBuffer, - IN ULONG CompressedBufferSize, - IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo, - IN ULONG CompressedDataInfoLength, - IN PVOID WorkSpace); + _In_reads_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer, + _In_ ULONG UncompressedBufferSize, + _Out_writes_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer, + _In_range_(>=, (UncompressedBufferSize - (UncompressedBufferSize / 16))) ULONG CompressedBufferSize, + _Inout_updates_bytes_(CompressedDataInfoLength) PCOMPRESSED_DATA_INFO CompressedDataInfo, + _In_range_(>, sizeof(COMPRESSED_DATA_INFO)) ULONG CompressedDataInfoLength, + _In_ PVOID WorkSpace); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI PSID_IDENTIFIER_AUTHORITY NTAPI RtlIdentifierAuthoritySid( - IN PSID Sid); + _In_ PSID Sid); NTSYSAPI PUCHAR NTAPI RtlSubAuthorityCountSid( - IN PSID Sid); + _In_ PSID Sid); +_When_(Status < 0, _Out_range_(>, 0)) +_When_(Status >= 0, _Out_range_(==, 0)) NTSYSAPI ULONG NTAPI RtlNtStatusToDosErrorNoTeb( - IN NTSTATUS Status); + _In_ NTSTATUS Status); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCreateSystemVolumeInformationFolder( - IN PCUNICODE_STRING VolumeRootPath); + _In_ PCUNICODE_STRING VolumeRootPath); #if defined(_M_AMD64) FORCEINLINE VOID -RtlFillMemoryUlong ( - OUT PVOID Destination, - IN SIZE_T Length, - IN ULONG Pattern) +RtlFillMemoryUlong( + _Out_writes_bytes_all_(Length) PVOID Destination, + _In_ SIZE_T Length, + _In_ ULONG Pattern) { PULONG Address = (PULONG)Destination; if ((Length /= 4) != 0) { @@ -1702,73 +1839,79 @@ NTSYSAPI VOID NTAPI RtlFillMemoryUlonglong( - OUT PVOID Destination, - IN SIZE_T Length, - IN ULONGLONG Pattern); + _Out_writes_bytes_all_(Length) PVOID Destination, + _In_ SIZE_T Length, + _In_ ULONGLONG Pattern); #endif /* defined(_M_AMD64) */ #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) +_IRQL_requires_max_(DISPATCH_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlInitAnsiStringEx( - OUT PANSI_STRING DestinationString, - IN PCSZ SourceString OPTIONAL); + _Out_ PANSI_STRING DestinationString, + _In_opt_z_ __drv_aliasesMem PCSZ SourceString); #endif #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlGetSaclSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - OUT PBOOLEAN SaclPresent, - OUT PACL *Sacl, - OUT PBOOLEAN SaclDefaulted); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PBOOLEAN SaclPresent, + _Out_ PACL *Sacl, + _Out_ PBOOLEAN SaclDefaulted); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlSetGroupSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID Group OPTIONAL, - IN BOOLEAN GroupDefaulted OPTIONAL); + _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSID Group, + _In_opt_ BOOLEAN GroupDefaulted); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlGetGroupSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - OUT PSID *Group, - OUT PBOOLEAN GroupDefaulted); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Out_ PSID *Group, + _Out_ PBOOLEAN GroupDefaulted); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlAbsoluteToSelfRelativeSD( - IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, - OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL, - IN OUT PULONG BufferLength); + _In_ PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, + _Out_writes_bytes_to_opt_(*BufferLength, *BufferLength) PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, + _Inout_ PULONG BufferLength); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlSelfRelativeToAbsoluteSD( - IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, - OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL, - IN OUT PULONG AbsoluteSecurityDescriptorSize, - OUT PACL Dacl OPTIONAL, - IN OUT PULONG DaclSize, - OUT PACL Sacl OPTIONAL, - IN OUT PULONG SaclSize, - OUT PSID Owner OPTIONAL, - IN OUT PULONG OwnerSize, - OUT PSID PrimaryGroup OPTIONAL, - IN OUT PULONG PrimaryGroupSize); + _In_ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, + _Out_writes_bytes_to_opt_(*AbsoluteSecurityDescriptorSize, *AbsoluteSecurityDescriptorSize) PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, + _Inout_ PULONG AbsoluteSecurityDescriptorSize, + _Out_writes_bytes_to_opt_(*DaclSize, *DaclSize) PACL Dacl, + _Inout_ PULONG DaclSize, + _Out_writes_bytes_to_opt_(*SaclSize, *SaclSize) PACL Sacl, + _Inout_ PULONG SaclSize, + _Out_writes_bytes_to_opt_(*OwnerSize, *OwnerSize) PSID Owner, + _Inout_ PULONG OwnerSize, + _Out_writes_bytes_to_opt_(*PrimaryGroupSize, *PrimaryGroupSize) PSID PrimaryGroup, + _Inout_ PULONG PrimaryGroupSize); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ @@ -1778,30 +1921,30 @@ NTSYSAPI NTSTATUS NTAPI RtlNormalizeString( - IN ULONG NormForm, - IN PCWSTR SourceString, - IN LONG SourceStringLength, - OUT PWSTR DestinationString, - IN OUT PLONG DestinationStringLength); + _In_ ULONG NormForm, + _In_ PCWSTR SourceString, + _In_ LONG SourceStringLength, + _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString, + _Inout_ PLONG DestinationStringLength); NTSYSAPI NTSTATUS NTAPI RtlIsNormalizedString( - IN ULONG NormForm, - IN PCWSTR SourceString, - IN LONG SourceStringLength, - OUT PBOOLEAN Normalized); + _In_ ULONG NormForm, + _In_ PCWSTR SourceString, + _In_ LONG SourceStringLength, + _Out_ PBOOLEAN Normalized); NTSYSAPI NTSTATUS NTAPI RtlIdnToAscii( - IN ULONG Flags, - IN PCWSTR SourceString, - IN LONG SourceStringLength, - OUT PWSTR DestinationString, - IN OUT PLONG DestinationStringLength); + _In_ ULONG Flags, + _In_ PCWSTR SourceString, + _In_ LONG SourceStringLength, + _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString, + _Inout_ PLONG DestinationStringLength); NTSYSAPI NTSTATUS @@ -1817,69 +1960,74 @@ NTSYSAPI NTSTATUS NTAPI RtlIdnToNameprepUnicode( - IN ULONG Flags, - IN PCWSTR SourceString, - IN LONG SourceStringLength, - OUT PWSTR DestinationString, - IN OUT PLONG DestinationStringLength); + _In_ ULONG Flags, + _In_ PCWSTR SourceString, + _In_ LONG SourceStringLength, + _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString, + _Inout_ PLONG DestinationStringLength); NTSYSAPI NTSTATUS NTAPI RtlCreateServiceSid( - IN PUNICODE_STRING ServiceName, - OUT PSID ServiceSid, - IN OUT PULONG ServiceSidLength); + _In_ PUNICODE_STRING ServiceName, + _Out_writes_bytes_opt_(*ServiceSidLength) PSID ServiceSid, + _Inout_ PULONG ServiceSidLength); NTSYSAPI LONG NTAPI RtlCompareAltitudes( - IN PCUNICODE_STRING Altitude1, - IN PCUNICODE_STRING Altitude2); + _In_ PCUNICODE_STRING Altitude1, + _In_ PCUNICODE_STRING Altitude2); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUnicodeToUTF8N( - OUT PCHAR UTF8StringDestination, - IN ULONG UTF8StringMaxByteCount, - OUT PULONG UTF8StringActualByteCount, - IN PCWCH UnicodeStringSource, - IN ULONG UnicodeStringByteCount); + _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount) PCHAR UTF8StringDestination, + _In_ ULONG UTF8StringMaxByteCount, + _Out_ PULONG UTF8StringActualByteCount, + _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource, + _In_ ULONG UnicodeStringByteCount); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUTF8ToUnicodeN( - OUT PWSTR UnicodeStringDestination, - IN ULONG UnicodeStringMaxByteCount, - OUT PULONG UnicodeStringActualByteCount, - IN PCCH UTF8StringSource, - IN ULONG UTF8StringByteCount); + _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount) PWSTR UnicodeStringDestination, + _In_ ULONG UnicodeStringMaxByteCount, + _Out_ PULONG UnicodeStringActualByteCount, + _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource, + _In_ ULONG UTF8StringByteCount); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlReplaceSidInSd( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID OldSid, - IN PSID NewSid, - OUT ULONG *NumChanges); + _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PSID OldSid, + _In_ PSID NewSid, + _Out_ ULONG *NumChanges); NTSYSAPI NTSTATUS NTAPI RtlCreateVirtualAccountSid( - IN PCUNICODE_STRING Name, - IN ULONG BaseSubAuthority, - OUT PSID Sid, - IN OUT PULONG SidLength); + _In_ PCUNICODE_STRING Name, + _In_ ULONG BaseSubAuthority, + _Out_writes_bytes_(*SidLength) PSID Sid, + _Inout_ PULONG SidLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -1913,529 +2061,601 @@ RtlCreateVirtualAccountSid( #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O)))) #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B)))) +_IRQL_requires_max_(PASSIVE_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryObject( - IN HANDLE Handle OPTIONAL, - IN OBJECT_INFORMATION_CLASS ObjectInformationClass, - OUT PVOID ObjectInformation OPTIONAL, - IN ULONG ObjectInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_opt_ HANDLE Handle, + _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass, + _Out_writes_bytes_opt_(ObjectInformationLength) PVOID ObjectInformation, + _In_ ULONG ObjectInformationLength, + _Out_opt_ PULONG ReturnLength); #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenThreadToken( - IN HANDLE ThreadHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN OpenAsSelf, - OUT PHANDLE TokenHandle); + _In_ HANDLE ThreadHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN OpenAsSelf, + _Out_ PHANDLE TokenHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenProcessToken( - IN HANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE TokenHandle); + _In_ HANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE TokenHandle); +_When_(TokenInformationClass == TokenAccessInformation, + _At_(TokenInformationLength, + _In_range_(>=, sizeof(TOKEN_ACCESS_INFORMATION)))) +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - OUT PVOID TokenInformation OPTIONAL, - IN ULONG TokenInformationLength, - OUT PULONG ReturnLength); + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Out_writes_bytes_to_opt_(TokenInformationLength, *ReturnLength) PVOID TokenInformation, + _In_ ULONG TokenInformationLength, + _Out_ PULONG ReturnLength); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAdjustPrivilegesToken( - IN HANDLE TokenHandle, - IN BOOLEAN DisableAllPrivileges, - IN PTOKEN_PRIVILEGES NewState OPTIONAL, - IN ULONG BufferLength, - OUT PTOKEN_PRIVILEGES PreviousState, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE TokenHandle, + _In_ BOOLEAN DisableAllPrivileges, + _In_opt_ PTOKEN_PRIVILEGES NewState, + _In_ ULONG BufferLength, + _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_PRIVILEGES PreviousState, + _Out_ _When_(PreviousState == NULL, _Out_opt_) PULONG ReturnLength); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG CreateDisposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer, - IN ULONG EaLength); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG CreateDisposition, + _In_ ULONG CreateOptions, + _In_reads_bytes_opt_(EaLength) PVOID EaBuffer, + _In_ ULONG EaLength); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtDeviceIoControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG IoControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG IoControlCode, + _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, + _In_ ULONG OutputBufferLength); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtFsControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG FsControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG FsControlCode, + _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, + _In_ ULONG OutputBufferLength); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtLockFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key, - IN BOOLEAN FailImmediately, - IN BOOLEAN ExclusiveLock); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ PLARGE_INTEGER ByteOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key, + _In_ BOOLEAN FailImmediately, + _In_ BOOLEAN ExclusiveLock); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG ShareAccess, - IN ULONG OpenOptions); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG ShareAccess, + _In_ ULONG OpenOptions); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryDirectoryFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass, - IN BOOLEAN ReturnSingleEntry, - IN PUNICODE_STRING FileName OPTIONAL, - IN BOOLEAN RestartScan); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ BOOLEAN ReturnSingleEntry, + _In_opt_ PUNICODE_STRING FileName, + _In_ BOOLEAN RestartScan); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN BOOLEAN ReturnSingleEntry, - IN PVOID SidList, - IN ULONG SidListLength, - IN PSID StartSid OPTIONAL, - IN BOOLEAN RestartScan); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ BOOLEAN ReturnSingleEntry, + _In_reads_bytes_opt_(SidListLength) PVOID SidList, + _In_ ULONG SidListLength, + _In_reads_bytes_opt_((8 + (4 * ((SID *)StartSid)->SubAuthorityCount))) PSID StartSid, + _In_ BOOLEAN RestartScan); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FsInformation, + _In_ ULONG Length, + _In_ FS_INFORMATION_CLASS FsInformationClass); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtReadFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID FsInformation, + _In_ ULONG Length, + _In_ FS_INFORMATION_CLASS FsInformationClass); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtWriteFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtUnlockFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ PLARGE_INTEGER ByteOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key); +_IRQL_requires_max_(PASSIVE_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetSecurityObject( - IN HANDLE Handle, - IN SECURITY_INFORMATION SecurityInformation, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ HANDLE Handle, + _In_ SECURITY_INFORMATION SecurityInformation, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); +_IRQL_requires_max_(PASSIVE_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQuerySecurityObject( - IN HANDLE Handle, - IN SECURITY_INFORMATION SecurityInformation, - OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ULONG Length, - OUT PULONG LengthNeeded); + _In_ HANDLE Handle, + _In_ SECURITY_INFORMATION SecurityInformation, + _Out_writes_bytes_opt_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ ULONG Length, + _Out_ PULONG LengthNeeded); +_IRQL_requires_max_(PASSIVE_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtClose( - IN HANDLE Handle); + _In_ HANDLE Handle); +_Must_inspect_result_ +__drv_allocatesMem(Mem) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAllocateVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN ULONG_PTR ZeroBits, - IN OUT PSIZE_T RegionSize, - IN ULONG AllocationType, - IN ULONG Protect); + _In_ HANDLE ProcessHandle, + _Outptr_result_bytebuffer_(*RegionSize) PVOID *BaseAddress, + _In_ ULONG_PTR ZeroBits, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG AllocationType, + _In_ ULONG Protect); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtFreeVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN OUT PSIZE_T RegionSize, - IN ULONG FreeType); + _In_ HANDLE ProcessHandle, + _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG FreeType); #endif #if (NTDDI_VERSION >= NTDDI_WINXP) +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenThreadTokenEx( - IN HANDLE ThreadHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN OpenAsSelf, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); + _In_ HANDLE ThreadHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN OpenAsSelf, + _In_ ULONG HandleAttributes, + _Out_ PHANDLE TokenHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenProcessTokenEx( - IN HANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); + _In_ HANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG HandleAttributes, + _Out_ PHANDLE TokenHandle); +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI NtOpenJobObjectToken( - IN HANDLE JobHandle, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE TokenHandle); + _In_ HANDLE JobHandle, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE TokenHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtDuplicateToken( - IN HANDLE ExistingTokenHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN BOOLEAN EffectiveOnly, - IN TOKEN_TYPE TokenType, - OUT PHANDLE NewTokenHandle); + _In_ HANDLE ExistingTokenHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN EffectiveOnly, + _In_ TOKEN_TYPE TokenType, + _Out_ PHANDLE NewTokenHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtFilterToken( - IN HANDLE ExistingTokenHandle, - IN ULONG Flags, - IN PTOKEN_GROUPS SidsToDisable OPTIONAL, - IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL, - IN PTOKEN_GROUPS RestrictedSids OPTIONAL, - OUT PHANDLE NewTokenHandle); + _In_ HANDLE ExistingTokenHandle, + _In_ ULONG Flags, + _In_opt_ PTOKEN_GROUPS SidsToDisable, + _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, + _In_opt_ PTOKEN_GROUPS RestrictedSids, + _Out_ PHANDLE NewTokenHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtImpersonateAnonymousToken( - IN HANDLE ThreadHandle); + _In_ HANDLE ThreadHandle); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - IN PVOID TokenInformation, - IN ULONG TokenInformationLength); + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _In_reads_bytes_(TokenInformationLength) PVOID TokenInformation, + _In_ ULONG TokenInformationLength); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAdjustGroupsToken( - IN HANDLE TokenHandle, - IN BOOLEAN ResetToDefault, - IN PTOKEN_GROUPS NewState OPTIONAL, - IN ULONG BufferLength OPTIONAL, - OUT PTOKEN_GROUPS PreviousState, - OUT PULONG ReturnLength); + _In_ HANDLE TokenHandle, + _In_ BOOLEAN ResetToDefault, + _In_opt_ PTOKEN_GROUPS NewState, + _In_opt_ ULONG BufferLength, + _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_GROUPS PreviousState, + _Out_ PULONG ReturnLength); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrivilegeCheck( - IN HANDLE ClientToken, - IN OUT PPRIVILEGE_SET RequiredPrivileges, - OUT PBOOLEAN Result); + _In_ HANDLE ClientToken, + _Inout_ PPRIVILEGE_SET RequiredPrivileges, + _Out_ PBOOLEAN Result); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAccessCheckAndAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN PUNICODE_STRING ObjectTypeName, - IN PUNICODE_STRING ObjectName, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ACCESS_MASK DesiredAccess, - IN PGENERIC_MAPPING GenericMapping, - IN BOOLEAN ObjectCreation, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ PUNICODE_STRING ObjectTypeName, + _In_ PUNICODE_STRING ObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ ACCESS_MASK DesiredAccess, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ BOOLEAN ObjectCreation, + _Out_ PACCESS_MASK GrantedAccess, + _Out_ PNTSTATUS AccessStatus, + _Out_ PBOOLEAN GenerateOnClose); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAccessCheckByTypeAndAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId, - IN PUNICODE_STRING ObjectTypeName, - IN PUNICODE_STRING ObjectName, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID PrincipalSelfSid OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN AUDIT_EVENT_TYPE AuditType, - IN ULONG Flags, - IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, - IN ULONG ObjectTypeLength, - IN PGENERIC_MAPPING GenericMapping, - IN BOOLEAN ObjectCreation, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ PUNICODE_STRING ObjectTypeName, + _In_ PUNICODE_STRING ObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSID PrincipalSelfSid, + _In_ ACCESS_MASK DesiredAccess, + _In_ AUDIT_EVENT_TYPE AuditType, + _In_ ULONG Flags, + _In_reads_opt_(ObjectTypeLength) POBJECT_TYPE_LIST ObjectTypeList, + _In_ ULONG ObjectTypeLength, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ BOOLEAN ObjectCreation, + _Out_ PACCESS_MASK GrantedAccess, + _Out_ PNTSTATUS AccessStatus, + _Out_ PBOOLEAN GenerateOnClose); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtAccessCheckByTypeResultListAndAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN PUNICODE_STRING ObjectTypeName, - IN PUNICODE_STRING ObjectName, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID PrincipalSelfSid OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN AUDIT_EVENT_TYPE AuditType, - IN ULONG Flags, - IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, - IN ULONG ObjectTypeLength, - IN PGENERIC_MAPPING GenericMapping, - IN BOOLEAN ObjectCreation, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ PUNICODE_STRING ObjectTypeName, + _In_ PUNICODE_STRING ObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSID PrincipalSelfSid, + _In_ ACCESS_MASK DesiredAccess, + _In_ AUDIT_EVENT_TYPE AuditType, + _In_ ULONG Flags, + _In_reads_opt_(ObjectTypeListLength) POBJECT_TYPE_LIST ObjectTypeList, + _In_ ULONG ObjectTypeListLength, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ BOOLEAN ObjectCreation, + _Out_writes_(ObjectTypeListLength) PACCESS_MASK GrantedAccess, + _Out_writes_(ObjectTypeListLength) PNTSTATUS AccessStatus, + _Out_ PBOOLEAN GenerateOnClose); +_Must_inspect_result_ +__kernel_entry +NTSYSCALLAPI NTSTATUS NTAPI NtAccessCheckByTypeResultListAndAuditAlarmByHandle( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN HANDLE ClientToken, - IN PUNICODE_STRING ObjectTypeName, - IN PUNICODE_STRING ObjectName, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSID PrincipalSelfSid OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN AUDIT_EVENT_TYPE AuditType, - IN ULONG Flags, - IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, - IN ULONG ObjectTypeLength, - IN PGENERIC_MAPPING GenericMapping, - IN BOOLEAN ObjectCreation, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ HANDLE ClientToken, + _In_ PUNICODE_STRING ObjectTypeName, + _In_ PUNICODE_STRING ObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSID PrincipalSelfSid, + _In_ ACCESS_MASK DesiredAccess, + _In_ AUDIT_EVENT_TYPE AuditType, + _In_ ULONG Flags, + _In_reads_opt_(ObjectTypeListLength) POBJECT_TYPE_LIST ObjectTypeList, + _In_ ULONG ObjectTypeListLength, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ BOOLEAN ObjectCreation, + _Out_writes_(ObjectTypeListLength) PACCESS_MASK GrantedAccess, + _Out_writes_(ObjectTypeListLength) PNTSTATUS AccessStatus, + _Out_ PBOOLEAN GenerateOnClose); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN PUNICODE_STRING ObjectTypeName, - IN PUNICODE_STRING ObjectName, - IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, - IN HANDLE ClientToken, - IN ACCESS_MASK DesiredAccess, - IN ACCESS_MASK GrantedAccess, - IN PPRIVILEGE_SET Privileges OPTIONAL, - IN BOOLEAN ObjectCreation, - IN BOOLEAN AccessGranted, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ PUNICODE_STRING ObjectTypeName, + _In_ PUNICODE_STRING ObjectName, + _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ HANDLE ClientToken, + _In_ ACCESS_MASK DesiredAccess, + _In_ ACCESS_MASK GrantedAccess, + _In_opt_ PPRIVILEGE_SET Privileges, + _In_ BOOLEAN ObjectCreation, + _In_ BOOLEAN AccessGranted, + _Out_ PBOOLEAN GenerateOnClose); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrivilegeObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN HANDLE ClientToken, - IN ACCESS_MASK DesiredAccess, - IN PPRIVILEGE_SET Privileges, - IN BOOLEAN AccessGranted); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ HANDLE ClientToken, + _In_ ACCESS_MASK DesiredAccess, + _In_ PPRIVILEGE_SET Privileges, + _In_ BOOLEAN AccessGranted); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCloseObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN BOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ BOOLEAN GenerateOnClose); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtDeleteObjectAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PVOID HandleId OPTIONAL, - IN BOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING SubsystemName, + _In_opt_ PVOID HandleId, + _In_ BOOLEAN GenerateOnClose); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrivilegedServiceAuditAlarm( - IN PUNICODE_STRING SubsystemName, - IN PUNICODE_STRING ServiceName, - IN HANDLE ClientToken, - IN PPRIVILEGE_SET Privileges, - IN BOOLEAN AccessGranted); + _In_ PUNICODE_STRING SubsystemName, + _In_ PUNICODE_STRING ServiceName, + _In_ HANDLE ClientToken, + _In_ PPRIVILEGE_SET Privileges, + _In_ BOOLEAN AccessGranted); +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationThread( - IN HANDLE ThreadHandle, - IN THREADINFOCLASS ThreadInformationClass, - IN PVOID ThreadInformation, - IN ULONG ThreadInformationLength); + _In_ HANDLE ThreadHandle, + _In_ THREADINFOCLASS ThreadInformationClass, + _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation, + _In_ ULONG ThreadInformationLength); +_Must_inspect_result_ +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateSection( - OUT PHANDLE SectionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PLARGE_INTEGER MaximumSize OPTIONAL, - IN ULONG SectionPageProtection, - IN ULONG AllocationAttributes, - IN HANDLE FileHandle OPTIONAL); + _Out_ PHANDLE SectionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PLARGE_INTEGER MaximumSize, + _In_ ULONG SectionPageProtection, + _In_ ULONG AllocationAttributes, + _In_opt_ HANDLE FileHandle); #endif @@ -2484,35 +2704,40 @@ typedef enum _SECURITY_LOGON_TYPE { #endif /* _NTLSA_AUDIT_ */ +_IRQL_requires_same_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI LsaRegisterLogonProcess( - IN PLSA_STRING LogonProcessName, - OUT PHANDLE LsaHandle, - OUT PLSA_OPERATIONAL_MODE SecurityMode); + _In_ PLSA_STRING LogonProcessName, + _Out_ PHANDLE LsaHandle, + _Out_ PLSA_OPERATIONAL_MODE SecurityMode); +_IRQL_requires_same_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI LsaLogonUser( - IN HANDLE LsaHandle, - IN PLSA_STRING OriginName, - IN SECURITY_LOGON_TYPE LogonType, - IN ULONG AuthenticationPackage, - IN PVOID AuthenticationInformation, - IN ULONG AuthenticationInformationLength, - IN PTOKEN_GROUPS LocalGroups OPTIONAL, - IN PTOKEN_SOURCE SourceContext, - OUT PVOID *ProfileBuffer, - OUT PULONG ProfileBufferLength, - OUT PLUID LogonId, - OUT PHANDLE Token, - OUT PQUOTA_LIMITS Quotas, - OUT PNTSTATUS SubStatus); + _In_ HANDLE LsaHandle, + _In_ PLSA_STRING OriginName, + _In_ SECURITY_LOGON_TYPE LogonType, + _In_ ULONG AuthenticationPackage, + _In_reads_bytes_(AuthenticationInformationLength) PVOID AuthenticationInformation, + _In_ ULONG AuthenticationInformationLength, + _In_opt_ PTOKEN_GROUPS LocalGroups, + _In_ PTOKEN_SOURCE SourceContext, + _Out_ PVOID *ProfileBuffer, + _Out_ PULONG ProfileBufferLength, + _Inout_ PLUID LogonId, + _Out_ PHANDLE Token, + _Out_ PQUOTA_LIMITS Quotas, + _Out_ PNTSTATUS SubStatus); +_IRQL_requires_same_ NTSTATUS NTAPI LsaFreeReturnBuffer( - IN PVOID Buffer); + _In_ PVOID Buffer); #ifndef _NTLSA_IFS_ #define _NTLSA_IFS_ @@ -4596,8 +4821,8 @@ typedef struct _REMOTE_LINK_TRACKING_INFORMATION { typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) ( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN FsActive); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN FsActive); typedef enum _FS_FILTER_SECTION_SYNC_TYPE { SyncTypeOther = 0, @@ -4652,14 +4877,14 @@ typedef struct _FS_FILTER_CALLBACK_DATA { typedef NTSTATUS (NTAPI *PFS_FILTER_CALLBACK) ( - IN PFS_FILTER_CALLBACK_DATA Data, - OUT PVOID *CompletionContext); + _In_ PFS_FILTER_CALLBACK_DATA Data, + _Out_ PVOID *CompletionContext); typedef VOID (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) ( - IN PFS_FILTER_CALLBACK_DATA Data, - IN NTSTATUS OperationStatus, - IN PVOID CompletionContext); + _In_ PFS_FILTER_CALLBACK_DATA Data, + _In_ NTSTATUS OperationStatus, + _In_ PVOID CompletionContext); typedef struct _FS_FILTER_CALLBACKS { ULONG SizeOfFsFilterCallbacks; @@ -4683,8 +4908,8 @@ NTKERNELAPI NTSTATUS NTAPI FsRtlRegisterFileSystemFilterCallbacks( - IN struct _DRIVER_OBJECT *FilterDriverObject, - IN PFS_FILTER_CALLBACKS Callbacks); + _In_ struct _DRIVER_OBJECT *FilterDriverObject, + _In_ PFS_FILTER_CALLBACKS Callbacks); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -4692,10 +4917,10 @@ NTKERNELAPI NTSTATUS NTAPI FsRtlNotifyStreamFileObject( - IN struct _FILE_OBJECT * StreamFileObject, - IN struct _DEVICE_OBJECT *DeviceObjectHint OPTIONAL, - IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType, - IN BOOLEAN SafeToRecurse); + _In_ struct _FILE_OBJECT * StreamFileObject, + _In_opt_ struct _DEVICE_OBJECT *DeviceObjectHint, + _In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType, + _In_ BOOLEAN SafeToRecurse); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #define DO_VERIFY_VOLUME 0x00000002 @@ -4787,13 +5012,13 @@ typedef struct _KQUEUE { NTSTATUS NTAPI KeGetProcessorNumberFromIndex( - IN ULONG ProcIndex, - OUT PPROCESSOR_NUMBER ProcNumber); + _In_ ULONG ProcIndex, + _Out_ PPROCESSOR_NUMBER ProcNumber); ULONG NTAPI KeGetProcessorIndexFromNumber( - IN PPROCESSOR_NUMBER ProcNumber); + _In_ PPROCESSOR_NUMBER ProcNumber); #if (NTDDI_VERSION >= NTDDI_WIN2K) @@ -4804,114 +5029,140 @@ NTKERNELAPI VOID NTAPI KeInitializeMutant( - OUT PRKMUTANT Mutant, - IN BOOLEAN InitialOwner); + _Out_ PRKMUTANT Mutant, + _In_ BOOLEAN InitialOwner); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeReadStateMutant( - IN PRKMUTANT Mutant); + _In_ PRKMUTANT Mutant); +_When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI LONG NTAPI KeReleaseMutant( - IN OUT PRKMUTANT Mutant, - IN KPRIORITY Increment, - IN BOOLEAN Abandoned, - IN BOOLEAN Wait); + _Inout_ PRKMUTANT Mutant, + _In_ KPRIORITY Increment, + _In_ BOOLEAN Abandoned, + _In_ BOOLEAN Wait); NTKERNELAPI VOID NTAPI KeInitializeQueue( - OUT PRKQUEUE Queue, - IN ULONG Count); + _Out_ PRKQUEUE Queue, + _In_ ULONG Count); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeReadStateQueue( - IN PRKQUEUE Queue); + _In_ PRKQUEUE Queue); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeInsertQueue( - IN OUT PRKQUEUE Queue, - IN OUT PLIST_ENTRY Entry); + _Inout_ PRKQUEUE Queue, + _Inout_ PLIST_ENTRY Entry); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeInsertHeadQueue( - IN OUT PRKQUEUE Queue, - IN OUT PLIST_ENTRY Entry); + _Inout_ PRKQUEUE Queue, + _Inout_ PLIST_ENTRY Entry); +_IRQL_requires_min_(PASSIVE_LEVEL) +_When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) +_When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) NTKERNELAPI PLIST_ENTRY NTAPI KeRemoveQueue( - IN OUT PRKQUEUE Queue, - IN KPROCESSOR_MODE WaitMode, - IN PLARGE_INTEGER Timeout OPTIONAL); + _Inout_ PRKQUEUE Queue, + _In_ KPROCESSOR_MODE WaitMode, + _In_opt_ PLARGE_INTEGER Timeout); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeAttachProcess( - IN OUT PKPROCESS Process); + _Inout_ PKPROCESS Process); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI -KeDetachProcess( - VOID); +KeDetachProcess(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PLIST_ENTRY NTAPI KeRundownQueue( - IN OUT PRKQUEUE Queue); + _Inout_ PRKQUEUE Queue); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeStackAttachProcess( - IN OUT PKPROCESS Process, - OUT PKAPC_STATE ApcState); + _Inout_ PKPROCESS Process, + _Out_ PKAPC_STATE ApcState); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeUnstackDetachProcess( - IN PKAPC_STATE ApcState); + _In_ PKAPC_STATE ApcState); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI UCHAR NTAPI KeSetIdealProcessorThread( - IN OUT PKTHREAD Thread, - IN UCHAR Processor); + _Inout_ PKTHREAD Thread, + _In_ UCHAR Processor); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeSetKernelStackSwapEnable( - IN BOOLEAN Enable); + _In_ BOOLEAN Enable); #if defined(_X86_) +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_raises_(SYNCH_LEVEL) +_IRQL_saves_ NTHALAPI KIRQL FASTCALL KeAcquireSpinLockRaiseToSynch( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); #else +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_raises_(SYNCH_LEVEL) +_IRQL_saves_ NTKERNELAPI KIRQL KeAcquireSpinLockRaiseToSynch( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); #endif #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -4919,25 +5170,32 @@ KeAcquireSpinLockRaiseToSynch( #if (NTDDI_VERSION >= NTDDI_WINXP) +_Requires_lock_not_held_(Number) +_Acquires_lock_(Number) +_IRQL_raises_(DISPATCH_LEVEL) _DECL_HAL_KE_IMPORT KIRQL FASTCALL KeAcquireQueuedSpinLock( - IN OUT KSPIN_LOCK_QUEUE_NUMBER Number); + _In_ KSPIN_LOCK_QUEUE_NUMBER Number); +_Requires_lock_held_(Number) +_Releases_lock_(Number) _DECL_HAL_KE_IMPORT VOID FASTCALL KeReleaseQueuedSpinLock( - IN OUT KSPIN_LOCK_QUEUE_NUMBER Number, - IN KIRQL OldIrql); + _In_ KSPIN_LOCK_QUEUE_NUMBER Number, + _In_ KIRQL OldIrql); +_Must_inspect_result_ +_Post_satisfies_(return == 1 || return == 0) _DECL_HAL_KE_IMPORT LOGICAL FASTCALL KeTryToAcquireQueuedSpinLock( - IN KSPIN_LOCK_QUEUE_NUMBER Number, - OUT PKIRQL OldIrql); + _In_ KSPIN_LOCK_QUEUE_NUMBER Number, + _Out_ _At_(*OldIrql, _IRQL_saves_) PKIRQL OldIrql); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -4947,27 +5205,30 @@ KeTryToAcquireQueuedSpinLock( #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID KeQueryOwnerMutant( - IN PKMUTANT Mutant, - OUT PCLIENT_ID ClientId); + _In_ PKMUTANT Mutant, + _Out_ PCLIENT_ID ClientId); +_IRQL_requires_min_(PASSIVE_LEVEL) +_When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) +_When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) NTKERNELAPI ULONG NTAPI KeRemoveQueueEx( - IN OUT PKQUEUE Queue, - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL, - OUT PLIST_ENTRY *EntryArray, - IN ULONG Count); + _Inout_ PKQUEUE Queue, + _In_ KPROCESSOR_MODE WaitMode, + _In_ BOOLEAN Alertable, + _In_opt_ PLARGE_INTEGER Timeout, + _Out_writes_to_(Count, return) PLIST_ENTRY *EntryArray, + _In_ ULONG Count); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ - #define INVALID_PROCESSOR_INDEX 0xffffffff #define EX_PUSH_LOCK ULONG_PTR @@ -4980,27 +5241,29 @@ KeRemoveQueueEx( #define ExDisableResourceBoost ExDisableResourceBoostLite VOID -ExInitializePushLock ( - OUT PEX_PUSH_LOCK PushLock); +ExInitializePushLock( + _Out_ PEX_PUSH_LOCK PushLock); #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI SIZE_T NTAPI ExQueryPoolBlockSize( - IN PVOID PoolBlock, - OUT PBOOLEAN QuotaCharged); + _In_ PVOID PoolBlock, + _Out_ PBOOLEAN QuotaCharged); +_IRQL_requires_max_(DISPATCH_LEVEL) VOID -ExAdjustLookasideDepth( - VOID); +ExAdjustLookasideDepth(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExDisableResourceBoostLite( - IN PERESOURCE Resource); + _In_ PERESOURCE Resource); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -5008,10 +5271,10 @@ ExDisableResourceBoostLite( PSLIST_ENTRY FASTCALL InterlockedPushListSList( - IN OUT PSLIST_HEADER ListHead, - IN OUT PSLIST_ENTRY List, - IN OUT PSLIST_ENTRY ListEnd, - IN ULONG Count); + _Inout_ PSLIST_HEADER ListHead, + _Inout_ __drv_aliasesMem PSLIST_ENTRY List, + _Inout_ PSLIST_ENTRY ListEnd, + _In_ ULONG Count); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ /****************************************************************************** @@ -5025,200 +5288,200 @@ NTKERNELAPI VOID NTAPI SeReleaseSubjectContext( - IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext); NTKERNELAPI BOOLEAN NTAPI SePrivilegeCheck( - IN OUT PPRIVILEGE_SET RequiredPrivileges, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN KPROCESSOR_MODE AccessMode); + _Inout_ PPRIVILEGE_SET RequiredPrivileges, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, + _In_ KPROCESSOR_MODE AccessMode); NTKERNELAPI VOID NTAPI SeOpenObjectAuditAlarm( - IN PUNICODE_STRING ObjectTypeName, - IN PVOID Object OPTIONAL, - IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PACCESS_STATE AccessState, - IN BOOLEAN ObjectCreated, - IN BOOLEAN AccessGranted, - IN KPROCESSOR_MODE AccessMode, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING ObjectTypeName, + _In_opt_ PVOID Object, + _In_opt_ PUNICODE_STRING AbsoluteObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PACCESS_STATE AccessState, + _In_ BOOLEAN ObjectCreated, + _In_ BOOLEAN AccessGranted, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PBOOLEAN GenerateOnClose); NTKERNELAPI VOID NTAPI SeOpenObjectForDeleteAuditAlarm( - IN PUNICODE_STRING ObjectTypeName, - IN PVOID Object OPTIONAL, - IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PACCESS_STATE AccessState, - IN BOOLEAN ObjectCreated, - IN BOOLEAN AccessGranted, - IN KPROCESSOR_MODE AccessMode, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING ObjectTypeName, + _In_opt_ PVOID Object, + _In_opt_ PUNICODE_STRING AbsoluteObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PACCESS_STATE AccessState, + _In_ BOOLEAN ObjectCreated, + _In_ BOOLEAN AccessGranted, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PBOOLEAN GenerateOnClose); NTKERNELAPI VOID NTAPI SeDeleteObjectAuditAlarm( - IN PVOID Object, - IN HANDLE Handle); + _In_ PVOID Object, + _In_ HANDLE Handle); NTKERNELAPI TOKEN_TYPE NTAPI SeTokenType( - IN PACCESS_TOKEN Token); + _In_ PACCESS_TOKEN Token); NTKERNELAPI BOOLEAN NTAPI SeTokenIsAdmin( - IN PACCESS_TOKEN Token); + _In_ PACCESS_TOKEN Token); NTKERNELAPI BOOLEAN NTAPI SeTokenIsRestricted( - IN PACCESS_TOKEN Token); + _In_ PACCESS_TOKEN Token); NTKERNELAPI NTSTATUS NTAPI SeQueryAuthenticationIdToken( - IN PACCESS_TOKEN Token, - OUT PLUID AuthenticationId); + _In_ PACCESS_TOKEN Token, + _Out_ PLUID AuthenticationId); NTKERNELAPI NTSTATUS NTAPI SeQuerySessionIdToken( - IN PACCESS_TOKEN Token, - OUT PULONG SessionId); + _In_ PACCESS_TOKEN Token, + _Out_ PULONG SessionId); NTKERNELAPI NTSTATUS NTAPI SeCreateClientSecurity( - IN PETHREAD ClientThread, - IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, - IN BOOLEAN RemoteSession, - OUT PSECURITY_CLIENT_CONTEXT ClientContext); + _In_ PETHREAD ClientThread, + _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, + _In_ BOOLEAN RemoteSession, + _Out_ PSECURITY_CLIENT_CONTEXT ClientContext); NTKERNELAPI VOID NTAPI SeImpersonateClient( - IN PSECURITY_CLIENT_CONTEXT ClientContext, - IN PETHREAD ServerThread OPTIONAL); + _In_ PSECURITY_CLIENT_CONTEXT ClientContext, + _In_opt_ PETHREAD ServerThread); NTKERNELAPI NTSTATUS NTAPI SeImpersonateClientEx( - IN PSECURITY_CLIENT_CONTEXT ClientContext, - IN PETHREAD ServerThread OPTIONAL); + _In_ PSECURITY_CLIENT_CONTEXT ClientContext, + _In_opt_ PETHREAD ServerThread); NTKERNELAPI NTSTATUS NTAPI SeCreateClientSecurityFromSubjectContext( - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, - IN BOOLEAN ServerIsRemote, - OUT PSECURITY_CLIENT_CONTEXT ClientContext); + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, + _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, + _In_ BOOLEAN ServerIsRemote, + _Out_ PSECURITY_CLIENT_CONTEXT ClientContext); NTKERNELAPI NTSTATUS NTAPI SeQuerySecurityDescriptorInfo( - IN PSECURITY_INFORMATION SecurityInformation, - OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN OUT PULONG Length, - IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor); + _In_ PSECURITY_INFORMATION SecurityInformation, + _Out_writes_bytes_(*Length) PSECURITY_DESCRIPTOR SecurityDescriptor, + _Inout_ PULONG Length, + _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor); NTKERNELAPI NTSTATUS NTAPI SeSetSecurityDescriptorInfo( - IN PVOID Object OPTIONAL, - IN PSECURITY_INFORMATION SecurityInformation, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, - IN POOL_TYPE PoolType, - IN PGENERIC_MAPPING GenericMapping); + _In_opt_ PVOID Object, + _In_ PSECURITY_INFORMATION SecurityInformation, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + _In_ POOL_TYPE PoolType, + _In_ PGENERIC_MAPPING GenericMapping); NTKERNELAPI NTSTATUS NTAPI SeSetSecurityDescriptorInfoEx( - IN PVOID Object OPTIONAL, - IN PSECURITY_INFORMATION SecurityInformation, - IN PSECURITY_DESCRIPTOR ModificationDescriptor, - IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, - IN ULONG AutoInheritFlags, - IN POOL_TYPE PoolType, - IN PGENERIC_MAPPING GenericMapping); + _In_opt_ PVOID Object, + _In_ PSECURITY_INFORMATION SecurityInformation, + _In_ PSECURITY_DESCRIPTOR ModificationDescriptor, + _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + _In_ ULONG AutoInheritFlags, + _In_ POOL_TYPE PoolType, + _In_ PGENERIC_MAPPING GenericMapping); NTKERNELAPI NTSTATUS NTAPI SeAppendPrivileges( - IN OUT PACCESS_STATE AccessState, - IN PPRIVILEGE_SET Privileges); + _Inout_ PACCESS_STATE AccessState, + _In_ PPRIVILEGE_SET Privileges); NTKERNELAPI BOOLEAN NTAPI SeAuditingFileEvents( - IN BOOLEAN AccessGranted, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ BOOLEAN AccessGranted, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); NTKERNELAPI BOOLEAN NTAPI SeAuditingFileOrGlobalEvents( - IN BOOLEAN AccessGranted, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext); + _In_ BOOLEAN AccessGranted, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext); VOID NTAPI SeSetAccessStateGenericMapping( - IN OUT PACCESS_STATE AccessState, - IN PGENERIC_MAPPING GenericMapping); + _Inout_ PACCESS_STATE AccessState, + _In_ PGENERIC_MAPPING GenericMapping); NTKERNELAPI NTSTATUS NTAPI SeRegisterLogonSessionTerminatedRoutine( - IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine); + _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine); NTKERNELAPI NTSTATUS NTAPI SeUnregisterLogonSessionTerminatedRoutine( - IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine); + _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine); NTKERNELAPI NTSTATUS NTAPI SeMarkLogonSessionForTerminationNotification( - IN PLUID LogonId); + _In_ PLUID LogonId); NTKERNELAPI NTSTATUS NTAPI SeQueryInformationToken( - IN PACCESS_TOKEN Token, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - OUT PVOID *TokenInformation); + _In_ PACCESS_TOKEN Token, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Outptr_result_buffer_(_Inexpressible_(token-dependent)) PVOID *TokenInformation); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WIN2KSP3) @@ -5226,8 +5489,8 @@ NTKERNELAPI BOOLEAN NTAPI SeAuditingHardLinkEvents( - IN BOOLEAN AccessGranted, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ BOOLEAN AccessGranted, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); #endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -5236,20 +5499,20 @@ NTKERNELAPI NTSTATUS NTAPI SeFilterToken( - IN PACCESS_TOKEN ExistingToken, - IN ULONG Flags, - IN PTOKEN_GROUPS SidsToDisable OPTIONAL, - IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL, - IN PTOKEN_GROUPS RestrictedSids OPTIONAL, - OUT PACCESS_TOKEN *FilteredToken); + _In_ PACCESS_TOKEN ExistingToken, + _In_ ULONG Flags, + _In_opt_ PTOKEN_GROUPS SidsToDisable, + _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, + _In_opt_ PTOKEN_GROUPS RestrictedSids, + _Outptr_ PACCESS_TOKEN *FilteredToken); NTKERNELAPI VOID NTAPI SeAuditHardLinkCreation( - IN PUNICODE_STRING FileName, - IN PUNICODE_STRING LinkName, - IN BOOLEAN bSuccess); + _In_ PUNICODE_STRING FileName, + _In_ PUNICODE_STRING LinkName, + _In_ BOOLEAN bSuccess); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -5259,17 +5522,17 @@ NTKERNELAPI BOOLEAN NTAPI SeAuditingFileEventsWithContext( - IN BOOLEAN AccessGranted, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL); + _In_ BOOLEAN AccessGranted, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext); NTKERNELAPI BOOLEAN NTAPI SeAuditingHardLinkEventsWithContext( - IN BOOLEAN AccessGranted, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL); + _In_ BOOLEAN AccessGranted, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext); #endif @@ -5280,81 +5543,81 @@ NTKERNELAPI VOID NTAPI SeOpenObjectAuditAlarmWithTransaction( - IN PUNICODE_STRING ObjectTypeName, - IN PVOID Object OPTIONAL, - IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PACCESS_STATE AccessState, - IN BOOLEAN ObjectCreated, - IN BOOLEAN AccessGranted, - IN KPROCESSOR_MODE AccessMode, - IN GUID *TransactionId OPTIONAL, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING ObjectTypeName, + _In_opt_ PVOID Object, + _In_opt_ PUNICODE_STRING AbsoluteObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PACCESS_STATE AccessState, + _In_ BOOLEAN ObjectCreated, + _In_ BOOLEAN AccessGranted, + _In_ KPROCESSOR_MODE AccessMode, + _In_opt_ GUID *TransactionId, + _Out_ PBOOLEAN GenerateOnClose); NTKERNELAPI VOID NTAPI SeOpenObjectForDeleteAuditAlarmWithTransaction( - IN PUNICODE_STRING ObjectTypeName, - IN PVOID Object OPTIONAL, - IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PACCESS_STATE AccessState, - IN BOOLEAN ObjectCreated, - IN BOOLEAN AccessGranted, - IN KPROCESSOR_MODE AccessMode, - IN GUID *TransactionId OPTIONAL, - OUT PBOOLEAN GenerateOnClose); + _In_ PUNICODE_STRING ObjectTypeName, + _In_opt_ PVOID Object, + _In_opt_ PUNICODE_STRING AbsoluteObjectName, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PACCESS_STATE AccessState, + _In_ BOOLEAN ObjectCreated, + _In_ BOOLEAN AccessGranted, + _In_ KPROCESSOR_MODE AccessMode, + _In_opt_ GUID *TransactionId, + _Out_ PBOOLEAN GenerateOnClose); NTKERNELAPI VOID NTAPI SeExamineSacl( - IN PACL Sacl, - IN PACCESS_TOKEN Token, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN AccessGranted, - OUT PBOOLEAN GenerateAudit, - OUT PBOOLEAN GenerateAlarm); + _In_ PACL Sacl, + _In_ PACCESS_TOKEN Token, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN AccessGranted, + _Out_ PBOOLEAN GenerateAudit, + _Out_ PBOOLEAN GenerateAlarm); NTKERNELAPI VOID NTAPI SeDeleteObjectAuditAlarmWithTransaction( - IN PVOID Object, - IN HANDLE Handle, - IN GUID *TransactionId OPTIONAL); + _In_ PVOID Object, + _In_ HANDLE Handle, + _In_opt_ GUID *TransactionId); NTKERNELAPI VOID NTAPI SeQueryTokenIntegrity( - IN PACCESS_TOKEN Token, - IN OUT PSID_AND_ATTRIBUTES IntegritySA); + _In_ PACCESS_TOKEN Token, + _Inout_ PSID_AND_ATTRIBUTES IntegritySA); NTKERNELAPI NTSTATUS NTAPI SeSetSessionIdToken( - IN PACCESS_TOKEN Token, - IN ULONG SessionId); + _In_ PACCESS_TOKEN Token, + _In_ ULONG SessionId); NTKERNELAPI VOID NTAPI SeAuditHardLinkCreationWithTransaction( - IN PUNICODE_STRING FileName, - IN PUNICODE_STRING LinkName, - IN BOOLEAN bSuccess, - IN GUID *TransactionId OPTIONAL); + _In_ PUNICODE_STRING FileName, + _In_ PUNICODE_STRING LinkName, + _In_ BOOLEAN bSuccess, + _In_opt_ GUID *TransactionId); NTKERNELAPI VOID NTAPI SeAuditTransactionStateChange( - IN GUID *TransactionId, - IN GUID *ResourceManagerId, - IN ULONG NewTransactionState); + _In_ GUID *TransactionId, + _In_ GUID *ResourceManagerId, + _In_ ULONG NewTransactionState); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03)) @@ -5362,7 +5625,7 @@ NTKERNELAPI BOOLEAN NTAPI SeTokenIsWriteRestricted( - IN PACCESS_TOKEN Token); + _In_ PACCESS_TOKEN Token); #endif #if (NTDDI_VERSION >= NTDDI_WIN7) @@ -5371,65 +5634,67 @@ NTKERNELAPI BOOLEAN NTAPI SeAuditingAnyFileEventsWithContext( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, + _Out_opt_ PBOOLEAN StagingEnabled); NTKERNELAPI VOID NTAPI SeExamineGlobalSacl( - IN PUNICODE_STRING ObjectType, - IN PACCESS_TOKEN Token, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN AccessGranted, - IN OUT PBOOLEAN GenerateAudit, - IN OUT PBOOLEAN GenerateAlarm OPTIONAL); + _In_ PUNICODE_STRING ObjectType, + _In_ PACL ResourceSacl, + _In_ PACCESS_TOKEN Token, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN AccessGranted, + _Inout_ PBOOLEAN GenerateAudit, + _Inout_opt_ PBOOLEAN GenerateAlarm); NTKERNELAPI VOID NTAPI SeMaximumAuditMaskFromGlobalSacl( - IN PUNICODE_STRING ObjectTypeName OPTIONAL, - IN ACCESS_MASK GrantedAccess, - IN PACCESS_TOKEN Token, - IN OUT PACCESS_MASK AuditMask); + _In_opt_ PUNICODE_STRING ObjectTypeName, + _In_ ACCESS_MASK GrantedAccess, + _In_ PACCESS_TOKEN Token, + _Inout_ PACCESS_MASK AuditMask); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ NTSTATUS NTAPI SeReportSecurityEventWithSubCategory( - IN ULONG Flags, - IN PUNICODE_STRING SourceName, - IN PSID UserSid OPTIONAL, - IN PSE_ADT_PARAMETER_ARRAY AuditParameters, - IN ULONG AuditSubcategoryId); + _In_ ULONG Flags, + _In_ PUNICODE_STRING SourceName, + _In_opt_ PSID UserSid, + _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters, + _In_ ULONG AuditSubcategoryId); BOOLEAN NTAPI SeAccessCheckFromState( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation, - IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN ACCESS_MASK PreviouslyGrantedAccess, - OUT PPRIVILEGE_SET *Privileges OPTIONAL, - IN PGENERIC_MAPPING GenericMapping, - IN KPROCESSOR_MODE AccessMode, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation, + _In_opt_ PTOKEN_ACCESS_INFORMATION ClientTokenInformation, + _In_ ACCESS_MASK DesiredAccess, + _In_ ACCESS_MASK PreviouslyGrantedAccess, + _Outptr_opt_result_maybenull_ PPRIVILEGE_SET *Privileges, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PACCESS_MASK GrantedAccess, + _Out_ PNTSTATUS AccessStatus); NTKERNELAPI VOID NTAPI SeFreePrivileges( - IN PPRIVILEGE_SET Privileges); + _In_ PPRIVILEGE_SET Privileges); NTSTATUS NTAPI SeLocateProcessImageName( - IN OUT PEPROCESS Process, - OUT PUNICODE_STRING *pImageFileName); + _Inout_ PEPROCESS Process, + _Outptr_ PUNICODE_STRING *pImageFileName); #define SeLengthSid( Sid ) \ (8 + (4 * ((SID *)Sid)->SubAuthorityCount)) @@ -5456,129 +5721,149 @@ extern NTKERNELAPI PSE_EXPORTS SeExports; * Process Manager Functions * ******************************************************************************/ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsLookupProcessByProcessId( - IN HANDLE ProcessId, - OUT PEPROCESS *Process); + _In_ HANDLE ProcessId, + _Outptr_ PEPROCESS *Process); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsLookupThreadByThreadId( - IN HANDLE UniqueThreadId, - OUT PETHREAD *Thread); + _In_ HANDLE UniqueThreadId, + _Outptr_ PETHREAD *Thread); #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PACCESS_TOKEN NTAPI PsReferenceImpersonationToken( - IN OUT PETHREAD Thread, - OUT PBOOLEAN CopyOnOpen, - OUT PBOOLEAN EffectiveOnly, - OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel); + _Inout_ PETHREAD Thread, + _Out_ PBOOLEAN CopyOnOpen, + _Out_ PBOOLEAN EffectiveOnly, + _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI LARGE_INTEGER NTAPI PsGetProcessExitTime(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI PsIsThreadTerminating( - IN PETHREAD Thread); + _In_ PETHREAD Thread); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsImpersonateClient( - IN OUT PETHREAD Thread, - IN PACCESS_TOKEN Token, - IN BOOLEAN CopyOnOpen, - IN BOOLEAN EffectiveOnly, - IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel); + _Inout_ PETHREAD Thread, + _In_opt_ PACCESS_TOKEN Token, + _In_ BOOLEAN CopyOnOpen, + _In_ BOOLEAN EffectiveOnly, + _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI PsDisableImpersonation( - IN OUT PETHREAD Thread, - IN OUT PSE_IMPERSONATION_STATE ImpersonationState); + _Inout_ PETHREAD Thread, + _Inout_ PSE_IMPERSONATION_STATE ImpersonationState); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI PsRestoreImpersonation( - IN PETHREAD Thread, - IN PSE_IMPERSONATION_STATE ImpersonationState); + _Inout_ PETHREAD Thread, + _In_ PSE_IMPERSONATION_STATE ImpersonationState); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI PsRevertToSelf(VOID); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI PsChargePoolQuota( - IN PEPROCESS Process, - IN POOL_TYPE PoolType, - IN ULONG_PTR Amount); + _In_ PEPROCESS Process, + _In_ POOL_TYPE PoolType, + _In_ ULONG_PTR Amount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI PsReturnPoolQuota( - IN PEPROCESS Process, - IN POOL_TYPE PoolType, - IN ULONG_PTR Amount); + _In_ PEPROCESS Process, + _In_ POOL_TYPE PoolType, + _In_ ULONG_PTR Amount); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsAssignImpersonationToken( - IN PETHREAD Thread, - IN HANDLE Token OPTIONAL); + _In_ PETHREAD Thread, + _In_opt_ HANDLE Token); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI HANDLE NTAPI PsReferencePrimaryToken( - IN OUT PEPROCESS Process); + _Inout_ PEPROCESS Process); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI PsDereferencePrimaryToken( - IN PACCESS_TOKEN PrimaryToken); + _In_ PACCESS_TOKEN PrimaryToken); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI PsDereferenceImpersonationToken( - IN PACCESS_TOKEN ImpersonationToken); + _In_ PACCESS_TOKEN ImpersonationToken); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsChargeProcessPoolQuota( - IN PEPROCESS Process, - IN POOL_TYPE PoolType, - IN ULONG_PTR Amount); + _In_ PEPROCESS Process, + _In_ POOL_TYPE PoolType, + _In_ ULONG_PTR Amount); NTKERNELAPI BOOLEAN NTAPI PsIsSystemThread( - IN PETHREAD Thread); + _In_ PETHREAD Thread); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ /****************************************************************************** @@ -5598,8 +5883,8 @@ NTKERNELAPI NTSTATUS NTAPI IoRegisterFsRegistrationChangeEx( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); #endif #if (NTDDI_VERSION >= NTDDI_WIN2K) @@ -5608,98 +5893,99 @@ NTKERNELAPI VOID NTAPI IoAcquireVpbSpinLock( - OUT PKIRQL Irql); + _Out_ PKIRQL Irql); NTKERNELAPI NTSTATUS NTAPI IoCheckDesiredAccess( - IN OUT PACCESS_MASK DesiredAccess, - IN ACCESS_MASK GrantedAccess); + _Inout_ PACCESS_MASK DesiredAccess, + _In_ ACCESS_MASK GrantedAccess); NTKERNELAPI NTSTATUS NTAPI IoCheckEaBufferValidity( - IN PFILE_FULL_EA_INFORMATION EaBuffer, - IN ULONG EaLength, - OUT PULONG ErrorOffset); + _In_ PFILE_FULL_EA_INFORMATION EaBuffer, + _In_ ULONG EaLength, + _Out_ PULONG ErrorOffset); NTKERNELAPI NTSTATUS NTAPI IoCheckFunctionAccess( - IN ACCESS_MASK GrantedAccess, - IN UCHAR MajorFunction, - IN UCHAR MinorFunction, - IN ULONG IoControlCode, - IN PVOID Argument1 OPTIONAL, - IN PVOID Argument2 OPTIONAL); + _In_ ACCESS_MASK GrantedAccess, + _In_ UCHAR MajorFunction, + _In_ UCHAR MinorFunction, + _In_ ULONG IoControlCode, + _In_opt_ PVOID Argument1, + _In_opt_ PVOID Argument2); NTKERNELAPI NTSTATUS NTAPI IoCheckQuerySetFileInformation( - IN FILE_INFORMATION_CLASS FileInformationClass, - IN ULONG Length, - IN BOOLEAN SetOperation); + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ ULONG Length, + _In_ BOOLEAN SetOperation); NTKERNELAPI NTSTATUS NTAPI IoCheckQuerySetVolumeInformation( - IN FS_INFORMATION_CLASS FsInformationClass, - IN ULONG Length, - IN BOOLEAN SetOperation); + _In_ FS_INFORMATION_CLASS FsInformationClass, + _In_ ULONG Length, + _In_ BOOLEAN SetOperation); NTKERNELAPI NTSTATUS NTAPI IoCheckQuotaBufferValidity( - IN PFILE_QUOTA_INFORMATION QuotaBuffer, - IN ULONG QuotaLength, - OUT PULONG ErrorOffset); + _In_ PFILE_QUOTA_INFORMATION QuotaBuffer, + _In_ ULONG QuotaLength, + _Out_ PULONG ErrorOffset); NTKERNELAPI PFILE_OBJECT NTAPI IoCreateStreamFileObject( - IN PFILE_OBJECT FileObject OPTIONAL, - IN PDEVICE_OBJECT DeviceObject OPTIONAL); + _In_opt_ PFILE_OBJECT FileObject, + _In_opt_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI PFILE_OBJECT NTAPI IoCreateStreamFileObjectLite( - IN PFILE_OBJECT FileObject OPTIONAL, - IN PDEVICE_OBJECT DeviceObject OPTIONAL); + _In_opt_ PFILE_OBJECT FileObject, + _In_opt_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI BOOLEAN NTAPI IoFastQueryNetworkAttributes( - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ACCESS_MASK DesiredAccess, - IN ULONG OpenOptions, - OUT PIO_STATUS_BLOCK IoStatus, - OUT PFILE_NETWORK_OPEN_INFORMATION Buffer); + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG OpenOptions, + _Out_ PIO_STATUS_BLOCK IoStatus, + _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer); NTKERNELAPI NTSTATUS NTAPI IoPageRead( - IN PFILE_OBJECT FileObject, - IN PMDL Mdl, - IN PLARGE_INTEGER Offset, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ PFILE_OBJECT FileObject, + _In_ PMDL Mdl, + _In_ PLARGE_INTEGER Offset, + _In_ PKEVENT Event, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetBaseFileSystemDeviceObject( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI @@ -5709,13 +5995,13 @@ NTKERNELAPI ULONG NTAPI IoGetRequestorProcessId( - IN PIRP Irp); + _In_ PIRP Irp); NTKERNELAPI PEPROCESS NTAPI IoGetRequestorProcess( - IN PIRP Irp); + _In_ PIRP Irp); NTKERNELAPI PIRP @@ -5726,130 +6012,130 @@ NTKERNELAPI BOOLEAN NTAPI IoIsOperationSynchronous( - IN PIRP Irp); + _In_ PIRP Irp); NTKERNELAPI BOOLEAN NTAPI IoIsSystemThread( - IN PETHREAD Thread); + _In_ PETHREAD Thread); NTKERNELAPI BOOLEAN NTAPI IoIsValidNameGraftingBuffer( - IN PIRP Irp, - IN PREPARSE_DATA_BUFFER ReparseBuffer); + _In_ PIRP Irp, + _In_ PREPARSE_DATA_BUFFER ReparseBuffer); NTKERNELAPI NTSTATUS NTAPI IoQueryFileInformation( - IN PFILE_OBJECT FileObject, - IN FILE_INFORMATION_CLASS FileInformationClass, - IN ULONG Length, - OUT PVOID FileInformation, - OUT PULONG ReturnedLength); + _In_ PFILE_OBJECT FileObject, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ ULONG Length, + _Out_ PVOID FileInformation, + _Out_ PULONG ReturnedLength); NTKERNELAPI NTSTATUS NTAPI IoQueryVolumeInformation( - IN PFILE_OBJECT FileObject, - IN FS_INFORMATION_CLASS FsInformationClass, - IN ULONG Length, - OUT PVOID FsInformation, - OUT PULONG ReturnedLength); + _In_ PFILE_OBJECT FileObject, + _In_ FS_INFORMATION_CLASS FsInformationClass, + _In_ ULONG Length, + _Out_ PVOID FsInformation, + _Out_ PULONG ReturnedLength); NTKERNELAPI VOID NTAPI IoQueueThreadIrp( - IN PIRP Irp); + _In_ PIRP Irp); NTKERNELAPI VOID NTAPI IoRegisterFileSystem( - IN PDEVICE_OBJECT DeviceObject); + _In_ __drv_aliasesMem PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoRegisterFsRegistrationChange( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); NTKERNELAPI VOID NTAPI IoReleaseVpbSpinLock( - IN KIRQL Irql); + _In_ KIRQL Irql); NTKERNELAPI VOID NTAPI IoSetDeviceToVerify( - IN PETHREAD Thread, - IN PDEVICE_OBJECT DeviceObject OPTIONAL); + _In_ PETHREAD Thread, + _In_opt_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoSetInformation( - IN PFILE_OBJECT FileObject, - IN FILE_INFORMATION_CLASS FileInformationClass, - IN ULONG Length, - IN PVOID FileInformation); + _In_ PFILE_OBJECT FileObject, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ ULONG Length, + _In_ PVOID FileInformation); NTKERNELAPI VOID NTAPI IoSetTopLevelIrp( - IN PIRP Irp OPTIONAL); + _In_opt_ PIRP Irp); NTKERNELAPI NTSTATUS NTAPI IoSynchronousPageWrite( - IN PFILE_OBJECT FileObject, - IN PMDL Mdl, - IN PLARGE_INTEGER FileOffset, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ PFILE_OBJECT FileObject, + _In_ PMDL Mdl, + _In_ PLARGE_INTEGER FileOffset, + _In_ PKEVENT Event, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); NTKERNELAPI PEPROCESS NTAPI IoThreadToProcess( - IN PETHREAD Thread); + _In_ PETHREAD Thread); NTKERNELAPI VOID NTAPI IoUnregisterFileSystem( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI VOID NTAPI IoUnregisterFsRegistrationChange( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine); NTKERNELAPI NTSTATUS NTAPI IoVerifyVolume( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN AllowRawMount); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN AllowRawMount); NTKERNELAPI NTSTATUS NTAPI IoGetRequestorSessionId( - IN PIRP Irp, - OUT PULONG pSessionId); + _In_ PIRP Irp, + _Out_ PULONG pSessionId); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -5861,44 +6147,45 @@ NTKERNELAPI PFILE_OBJECT NTAPI IoCreateStreamFileObjectEx( - IN PFILE_OBJECT FileObject OPTIONAL, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - OUT PHANDLE FileObjectHandle OPTIONAL); + _In_opt_ PFILE_OBJECT FileObject, + _In_opt_ PDEVICE_OBJECT DeviceObject, + _Out_opt_ PHANDLE FileObjectHandle); NTKERNELAPI NTSTATUS NTAPI IoQueryFileDosDeviceName( - IN PFILE_OBJECT FileObject, - OUT POBJECT_NAME_INFORMATION *ObjectNameInformation); + _In_ PFILE_OBJECT FileObject, + _Out_ POBJECT_NAME_INFORMATION *ObjectNameInformation); NTKERNELAPI NTSTATUS NTAPI IoEnumerateDeviceObjectList( - IN PDRIVER_OBJECT DriverObject, - OUT PDEVICE_OBJECT *DeviceObjectList, - IN ULONG DeviceObjectListSize, - OUT PULONG ActualNumberDeviceObjects); + _In_ PDRIVER_OBJECT DriverObject, + _Out_writes_bytes_to_opt_(DeviceObjectListSize,(*ActualNumberDeviceObjects)*sizeof(PDEVICE_OBJECT)) + PDEVICE_OBJECT *DeviceObjectList, + _In_ ULONG DeviceObjectListSize, + _Out_ PULONG ActualNumberDeviceObjects); NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetLowerDeviceObject( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetDeviceAttachmentBaseRef( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoGetDiskDeviceObject( - IN PDEVICE_OBJECT FileSystemDeviceObject, - OUT PDEVICE_OBJECT *DiskDeviceObject); + _In_ PDEVICE_OBJECT FileSystemDeviceObject, + _Out_ PDEVICE_OBJECT *DiskDeviceObject); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -5909,9 +6196,10 @@ NTKERNELAPI NTSTATUS NTAPI IoEnumerateRegisteredFiltersList( - OUT PDRIVER_OBJECT *DriverObjectList, - IN ULONG DriverObjectListSize, - OUT PULONG ActualNumberDriverObjects); + _Out_writes_bytes_to_opt_(DriverObjectListSize,(*ActualNumberDriverObjects)*sizeof(PDRIVER_OBJECT)) + PDRIVER_OBJECT *DriverObjectList, + _In_ ULONG DriverObjectListSize, + _Out_ PULONG ActualNumberDriverObjects); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -5920,12 +6208,12 @@ FORCEINLINE VOID NTAPI IoInitializePriorityInfo( - IN PIO_PRIORITY_INFO PriorityInfo) + _In_ PIO_PRIORITY_INFO PriorityInfo) { - PriorityInfo->Size = sizeof(IO_PRIORITY_INFO); - PriorityInfo->ThreadPriority = 0xffff; - PriorityInfo->IoPriority = IoPriorityNormal; - PriorityInfo->PagePriority = 0; + PriorityInfo->Size = sizeof(IO_PRIORITY_INFO); + PriorityInfo->ThreadPriority = 0xffff; + PriorityInfo->IoPriority = IoPriorityNormal; + PriorityInfo->PagePriority = 0; } #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -5936,17 +6224,17 @@ NTKERNELAPI NTSTATUS NTAPI IoRegisterFsRegistrationChangeMountAware( - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine, - IN BOOLEAN SynchronizeWithMounts); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine, + _In_ BOOLEAN SynchronizeWithMounts); NTKERNELAPI NTSTATUS NTAPI IoReplaceFileObjectName( - IN PFILE_OBJECT FileObject, - IN PWSTR NewFileName, - IN USHORT FileNameLength); + _In_ PFILE_OBJECT FileObject, + _In_reads_bytes_(FileNameLength) PWSTR NewFileName, + _In_ USHORT FileNameLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -5959,11 +6247,12 @@ IoReplaceFileObjectName( #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoQueueShutdownWorkItem( - IN OUT PWORK_QUEUE_ITEM WorkItem); + _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem); #endif /****************************************************************************** * Memory manager Types * @@ -6050,8 +6339,8 @@ typedef union _MM_PREFETCH_FLAGS { FORCEINLINE ULONG HEAP_MAKE_TAG_FLAGS( - IN ULONG TagBase, - IN ULONG Tag) + _In_ ULONG TagBase, + _In_ ULONG Tag) { //__assume_bound(TagBase); // FIXME return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT))); @@ -6062,59 +6351,64 @@ HEAP_MAKE_TAG_FLAGS( NTKERNELAPI BOOLEAN NTAPI -MmIsRecursiveIoFault( - VOID); +MmIsRecursiveIoFault(VOID); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmForceSectionClosed( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN BOOLEAN DelayClose); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_ BOOLEAN DelayClose); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmFlushImageSection( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN MMFLUSH_TYPE FlushType); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_ MMFLUSH_TYPE FlushType); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmCanFileBeTruncated( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER NewFileSize OPTIONAL); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_opt_ PLARGE_INTEGER NewFileSize); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI MmSetAddressRangeModified( - IN PVOID Address, - IN SIZE_T Length); + _In_reads_bytes_ (Length) PVOID Address, + _In_ SIZE_T Length); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_ (PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmPrefetchPages( - IN ULONG NumberOfLists, - IN PREAD_LIST *ReadLists); + _In_ ULONG NumberOfLists, + _In_reads_ (NumberOfLists) PREAD_LIST *ReadLists); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI ULONG NTAPI MmDoesFileHaveUserWritableReferences( - IN PSECTION_OBJECT_POINTERS SectionPointer); + _In_ PSECTION_OBJECT_POINTERS SectionPointer); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -6124,46 +6418,46 @@ NTKERNELAPI NTSTATUS NTAPI ObInsertObject( - IN PVOID Object, - IN OUT PACCESS_STATE PassedAccessState OPTIONAL, - IN ACCESS_MASK DesiredAccess OPTIONAL, - IN ULONG ObjectPointerBias, - OUT PVOID *NewObject OPTIONAL, - OUT PHANDLE Handle OPTIONAL); + _In_ PVOID Object, + _Inout_opt_ PACCESS_STATE PassedAccessState, + _In_opt_ ACCESS_MASK DesiredAccess, + _In_ ULONG ObjectPointerBias, + _Out_opt_ PVOID *NewObject, + _Out_opt_ PHANDLE Handle); NTKERNELAPI NTSTATUS NTAPI ObOpenObjectByPointer( - IN PVOID Object, - IN ULONG HandleAttributes, - IN PACCESS_STATE PassedAccessState OPTIONAL, - IN ACCESS_MASK DesiredAccess OPTIONAL, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - OUT PHANDLE Handle); + _In_ PVOID Object, + _In_ ULONG HandleAttributes, + _In_opt_ PACCESS_STATE PassedAccessState, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PHANDLE Handle); NTKERNELAPI VOID NTAPI ObMakeTemporaryObject( - IN PVOID Object); + _In_ PVOID Object); NTKERNELAPI NTSTATUS NTAPI ObQueryNameString( - IN PVOID Object, - OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL, - IN ULONG Length, - OUT PULONG ReturnLength); + _In_ PVOID Object, + _Out_writes_bytes_opt_(Length) POBJECT_NAME_INFORMATION ObjectNameInfo, + _In_ ULONG Length, + _Out_ PULONG ReturnLength); NTKERNELAPI NTSTATUS NTAPI ObQueryObjectAuditingByHandle( - IN HANDLE Handle, - OUT PBOOLEAN GenerateOnClose); + _In_ HANDLE Handle, + _Out_ PBOOLEAN GenerateOnClose); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -6172,7 +6466,7 @@ NTKERNELAPI BOOLEAN NTAPI ObIsKernelHandle( - IN HANDLE Handle); + _In_ HANDLE Handle); #endif @@ -6182,14 +6476,14 @@ NTKERNELAPI NTSTATUS NTAPI ObOpenObjectByPointerWithTag( - IN PVOID Object, - IN ULONG HandleAttributes, - IN PACCESS_STATE PassedAccessState OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Tag, - OUT PHANDLE Handle); + _In_ PVOID Object, + _In_ ULONG HandleAttributes, + _In_opt_ PACCESS_STATE PassedAccessState, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode, + _In_ ULONG Tag, + _Out_ PHANDLE Handle); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ /* FSRTL Types */ @@ -6295,9 +6589,9 @@ typedef enum _FSRTL_COMPARISON_RESULT { #define FSRTL_VOLUME_BACKGROUND_FORMAT 14 typedef VOID -(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) ( - IN PVOID Context, - IN PKEVENT Event); +(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE)( + _In_ PVOID Context, + _In_ PKEVENT Event); #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -6305,12 +6599,12 @@ typedef VOID #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004 -#define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001 +#define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001 -#define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001 -#define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002 +#define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001 +#define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002 -#define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002 +#define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002 @@ -6326,8 +6620,8 @@ typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 { typedef VOID (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) ( - IN OUT PVOID EcpContext, - IN LPCGUID EcpType); + _Inout_ PVOID EcpContext, + _In_ LPCGUID EcpType); typedef struct _ECP_LIST ECP_LIST, *PECP_LIST; @@ -6360,7 +6654,7 @@ typedef struct _FSRTL_PER_STREAM_CONTEXT { #if (NTDDI_VERSION >= NTDDI_WIN2K) typedef VOID (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) ( - IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); + _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); #endif typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT { @@ -6374,8 +6668,8 @@ typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT { typedef NTSTATUS (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) ( - IN PVOID Context, - IN PIRP Irp); + _In_ PVOID Context, + _In_ PIRP Irp); typedef struct _FILE_LOCK_INFO { LARGE_INTEGER StartingByte; @@ -6389,8 +6683,8 @@ typedef struct _FILE_LOCK_INFO { typedef VOID (NTAPI *PUNLOCK_ROUTINE) ( - IN PVOID Context, - IN PFILE_LOCK_INFO FileLockInfo); + _In_ PVOID Context, + _In_ PFILE_LOCK_INFO FileLockInfo); typedef struct _FILE_LOCK { PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine; @@ -6444,13 +6738,13 @@ typedef PVOID OPLOCK, *POPLOCK; typedef VOID (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) ( - IN PVOID Context, - IN PIRP Irp); + _In_ PVOID Context, + _In_ PIRP Irp); typedef VOID (NTAPI *POPLOCK_FS_PREPOST_IRP) ( - IN PVOID Context, - IN PIRP Irp); + _In_ PVOID Context, + _In_ PIRP Irp); #if (NTDDI_VERSION >= NTDDI_VISTASP1) #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001 @@ -6482,14 +6776,14 @@ typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER; typedef BOOLEAN (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) ( - IN PVOID NotifyContext, - IN PVOID TargetContext OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + _In_ PVOID NotifyContext, + _In_opt_ PVOID TargetContext, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext); typedef BOOLEAN (NTAPI *PFILTER_REPORT_CHANGE) ( - IN PVOID NotifyContext, - IN PVOID FilterContext); + _In_ PVOID NotifyContext, + _In_ PVOID FilterContext); /* FSRTL Functions */ #define FsRtlEnterFileSystem KeEnterCriticalRegion @@ -6497,124 +6791,145 @@ typedef BOOLEAN #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCopyRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_ ULONG LockKey, + _Out_writes_bytes_(Length) PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ PDEVICE_OBJECT DeviceObject); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCopyWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_ ULONG LockKey, + _In_reads_bytes_(Length) PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ PDEVICE_OBJECT DeviceObject); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlMdlReadDev( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject OPTIONAL); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _Outptr_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_opt_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlMdlReadCompleteDev( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain, - IN PDEVICE_OBJECT DeviceObject OPTIONAL); + _In_ PFILE_OBJECT FileObject, + _In_ PMDL MdlChain, + _In_opt_ PDEVICE_OBJECT DeviceObject); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlPrepareMdlWriteDev( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN PDEVICE_OBJECT DeviceObject); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _Outptr_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ PDEVICE_OBJECT DeviceObject); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlMdlWriteCompleteDev( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain, - IN PDEVICE_OBJECT DeviceObject); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PMDL MdlChain, + _In_opt_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlAcquireFileExclusive( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlReleaseFile( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlGetFileSize( - IN PFILE_OBJECT FileObject, - OUT PLARGE_INTEGER FileSize); + _In_ PFILE_OBJECT FileObject, + _Out_ PLARGE_INTEGER FileSize); +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI FsRtlIsTotalDeviceFailure( - IN NTSTATUS Status); + _In_ NTSTATUS Status); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFILE_LOCK NTAPI FsRtlAllocateFileLock( - IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, - IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL); + _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine, + _In_opt_ PUNLOCK_ROUTINE UnlockRoutine); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlFreeFileLock( - IN PFILE_LOCK FileLock); + _In_ PFILE_LOCK FileLock); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlInitializeFileLock( - IN PFILE_LOCK FileLock, - IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, - IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL); + _Out_ PFILE_LOCK FileLock, + _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine, + _In_opt_ PUNLOCK_ROUTINE UnlockRoutine); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlUninitializeFileLock( - IN PFILE_LOCK FileLock); + _Inout_ PFILE_LOCK FileLock); /* FsRtlProcessFileLock: @@ -6637,13 +6952,15 @@ FsRtlUninitializeFileLock( -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines. -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock. */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlProcessFileLock( - IN PFILE_LOCK FileLock, - IN PIRP Irp, - IN PVOID Context OPTIONAL); + _In_ PFILE_LOCK FileLock, + _In_ PIRP Irp, + _In_opt_ PVOID Context); /* FsRtlCheckLockForReadAccess: @@ -6652,12 +6969,14 @@ FsRtlProcessFileLock( location?), get IoGetRequestorProcess, and pass values on to FsRtlFastCheckLockForRead. */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCheckLockForReadAccess( - IN PFILE_LOCK FileLock, - IN PIRP Irp); + _In_ PFILE_LOCK FileLock, + _In_ PIRP Irp); /* FsRtlCheckLockForWriteAccess: @@ -6666,34 +6985,40 @@ FsRtlCheckLockForReadAccess( location?), get IoGetRequestorProcess, and pass values on to FsRtlFastCheckLockForWrite. */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCheckLockForWriteAccess( - IN PFILE_LOCK FileLock, - IN PIRP Irp); + _In_ PFILE_LOCK FileLock, + _In_ PIRP Irp); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlFastCheckLockForRead( - IN PFILE_LOCK FileLock, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key, - IN PFILE_OBJECT FileObject, - IN PVOID Process); + _In_ PFILE_LOCK FileLock, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key, + _In_ PFILE_OBJECT FileObject, + _In_ PVOID Process); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlFastCheckLockForWrite( - IN PFILE_LOCK FileLock, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key, - IN PFILE_OBJECT FileObject, - IN PVOID Process); + _In_ PFILE_LOCK FileLock, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key, + _In_ PFILE_OBJECT FileObject, + _In_ PVOID Process); /* FsRtlGetNextFileLock: @@ -6707,44 +7032,49 @@ FsRtlFastCheckLockForWrite( list, and FsRtlGetNextFileLock needs this to get next lock on subsequent calls with Restart = FALSE. */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFILE_LOCK_INFO NTAPI FsRtlGetNextFileLock( - IN PFILE_LOCK FileLock, - IN BOOLEAN Restart); + _In_ PFILE_LOCK FileLock, + _In_ BOOLEAN Restart); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlFastUnlockSingle( - IN PFILE_LOCK FileLock, - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - IN PEPROCESS Process, - IN ULONG Key, - IN PVOID Context OPTIONAL, - IN BOOLEAN AlreadySynchronized); + _In_ PFILE_LOCK FileLock, + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ PEPROCESS Process, + _In_ ULONG Key, + _In_opt_ PVOID Context, + _In_ BOOLEAN AlreadySynchronized); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlFastUnlockAll( - IN PFILE_LOCK FileLock, - IN PFILE_OBJECT FileObject, - IN PEPROCESS Process, - IN PVOID Context OPTIONAL); + _In_ PFILE_LOCK FileLock, + _In_ PFILE_OBJECT FileObject, + _In_ PEPROCESS Process, + _In_opt_ PVOID Context); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlFastUnlockAllByKey( - IN PFILE_LOCK FileLock, - IN PFILE_OBJECT FileObject, - IN PEPROCESS Process, - IN ULONG Key, - IN PVOID Context OPTIONAL); + _In_ PFILE_LOCK FileLock, + _In_ PFILE_OBJECT FileObject, + _In_ PEPROCESS Process, + _In_ ULONG Key, + _In_opt_ PVOID Context); /* FsRtlPrivateLock: @@ -6755,536 +7085,622 @@ FsRtlFastUnlockAllByKey( -Calls IoCompleteRequest if Irp -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) +__drv_preferredFunction(FsRtlFastLock, "Obsolete") NTKERNELAPI BOOLEAN NTAPI FsRtlPrivateLock( - IN PFILE_LOCK FileLock, - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - IN PEPROCESS Process, - IN ULONG Key, - IN BOOLEAN FailImmediately, - IN BOOLEAN ExclusiveLock, - OUT PIO_STATUS_BLOCK IoStatus, - IN PIRP Irp OPTIONAL, - IN PVOID Context, - IN BOOLEAN AlreadySynchronized); + _In_ PFILE_LOCK FileLock, + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ PEPROCESS Process, + _In_ ULONG Key, + _In_ BOOLEAN FailImmediately, + _In_ BOOLEAN ExclusiveLock, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_opt_ PIRP Irp, + _In_opt_ __drv_aliasesMem PVOID Context, + _In_ BOOLEAN AlreadySynchronized); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlInitializeTunnelCache( - IN PTUNNEL Cache); + _In_ PTUNNEL Cache); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlAddToTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey, - IN PUNICODE_STRING ShortName, - IN PUNICODE_STRING LongName, - IN BOOLEAN KeyByShortName, - IN ULONG DataLength, - IN PVOID Data); + _In_ PTUNNEL Cache, + _In_ ULONGLONG DirectoryKey, + _In_ PUNICODE_STRING ShortName, + _In_ PUNICODE_STRING LongName, + _In_ BOOLEAN KeyByShortName, + _In_ ULONG DataLength, + _In_reads_bytes_(DataLength) PVOID Data); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlFindInTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey, - IN PUNICODE_STRING Name, - OUT PUNICODE_STRING ShortName, - OUT PUNICODE_STRING LongName, - IN OUT PULONG DataLength, - OUT PVOID Data); + _In_ PTUNNEL Cache, + _In_ ULONGLONG DirectoryKey, + _In_ PUNICODE_STRING Name, + _Out_ PUNICODE_STRING ShortName, + _Out_ PUNICODE_STRING LongName, + _Inout_ PULONG DataLength, + _Out_writes_bytes_to_(*DataLength, *DataLength) PVOID Data); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlDeleteKeyFromTunnelCache( - IN PTUNNEL Cache, - IN ULONGLONG DirectoryKey); + _In_ PTUNNEL Cache, + _In_ ULONGLONG DirectoryKey); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlDeleteTunnelCache( - IN PTUNNEL Cache); + _In_ PTUNNEL Cache); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlDissectDbcs( - IN ANSI_STRING Name, - OUT PANSI_STRING FirstPart, - OUT PANSI_STRING RemainingPart); + _In_ ANSI_STRING Name, + _Out_ PANSI_STRING FirstPart, + _Out_ PANSI_STRING RemainingPart); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlDoesDbcsContainWildCards( - IN PANSI_STRING Name); + _In_ PANSI_STRING Name); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsDbcsInExpression( - IN PANSI_STRING Expression, - IN PANSI_STRING Name); + _In_ PANSI_STRING Expression, + _In_ PANSI_STRING Name); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsFatDbcsLegal( - IN ANSI_STRING DbcsName, - IN BOOLEAN WildCardsPermissible, - IN BOOLEAN PathNamePermissible, - IN BOOLEAN LeadingBackslashPermissible); + _In_ ANSI_STRING DbcsName, + _In_ BOOLEAN WildCardsPermissible, + _In_ BOOLEAN PathNamePermissible, + _In_ BOOLEAN LeadingBackslashPermissible); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsHpfsDbcsLegal( - IN ANSI_STRING DbcsName, - IN BOOLEAN WildCardsPermissible, - IN BOOLEAN PathNamePermissible, - IN BOOLEAN LeadingBackslashPermissible); + _In_ ANSI_STRING DbcsName, + _In_ BOOLEAN WildCardsPermissible, + _In_ BOOLEAN PathNamePermissible, + _In_ BOOLEAN LeadingBackslashPermissible); NTKERNELAPI NTSTATUS NTAPI FsRtlNormalizeNtstatus( - IN NTSTATUS Exception, - IN NTSTATUS GenericException); + _In_ NTSTATUS Exception, + _In_ NTSTATUS GenericException); +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI FsRtlIsNtstatusExpected( - IN NTSTATUS Ntstatus); + _In_ NTSTATUS Ntstatus); +_IRQL_requires_max_(APC_LEVEL) +__drv_preferredFunction(ExAllocateFromNPagedLookasideList, "The FsRtlAllocateResource routine is obsolete, but is exported to support existing driver binaries. Use ExAllocateFromNPagedLookasideList and ExInitializeResourceLite instead.") NTKERNELAPI PERESOURCE NTAPI -FsRtlAllocateResource( - VOID); +FsRtlAllocateResource(VOID); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlInitializeLargeMcb( - IN PLARGE_MCB Mcb, - IN POOL_TYPE PoolType); + _Out_ PLARGE_MCB Mcb, + _In_ POOL_TYPE PoolType); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlUninitializeLargeMcb( - IN PLARGE_MCB Mcb); + _Inout_ PLARGE_MCB Mcb); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlResetLargeMcb( - IN PLARGE_MCB Mcb, - IN BOOLEAN SelfSynchronized); + _Inout_ PLARGE_MCB Mcb, + _In_ BOOLEAN SelfSynchronized); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlTruncateLargeMcb( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn); + _Inout_ PLARGE_MCB Mcb, + _In_ LONGLONG Vbn); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlAddLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); + _Inout_ PLARGE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG Lbn, + _In_ LONGLONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlRemoveLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount); + _Inout_ PLARGE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL); + _In_ PLARGE_MCB Mcb, + _In_ LONGLONG Vbn, + _Out_opt_ PLONGLONG Lbn, + _Out_opt_ PLONGLONG SectorCountFromLbn, + _Out_opt_ PLONGLONG StartingLbn, + _Out_opt_ PLONGLONG SectorCountFromStartingLbn, + _Out_opt_ PULONG Index); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntry( - IN PLARGE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn); + _In_ PLARGE_MCB Mcb, + _Out_ PLONGLONG Vbn, + _Out_ PLONGLONG Lbn); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLastLargeMcbEntryAndIndex( - IN PLARGE_MCB OpaqueMcb, - OUT PLONGLONG LargeVbn, - OUT PLONGLONG LargeLbn, - OUT PULONG Index); + _In_ PLARGE_MCB OpaqueMcb, + _Out_ PLONGLONG LargeVbn, + _Out_ PLONGLONG LargeLbn, + _Out_ PULONG Index); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI ULONG NTAPI FsRtlNumberOfRunsInLargeMcb( - IN PLARGE_MCB Mcb); + _In_ PLARGE_MCB Mcb); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlGetNextLargeMcbEntry( - IN PLARGE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount); + _In_ PLARGE_MCB Mcb, + _In_ ULONG RunIndex, + _Out_ PLONGLONG Vbn, + _Out_ PLONGLONG Lbn, + _Out_ PLONGLONG SectorCount); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlSplitLargeMcb( - IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount); + _Inout_ PLARGE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG Amount); +_IRQL_requires_max_(APC_LEVEL) +__drv_preferredFunction(FsRtlInitializeLargeMcb, "Obsolete") NTKERNELAPI VOID NTAPI FsRtlInitializeMcb( - IN PMCB Mcb, - IN POOL_TYPE PoolType); + _Out_ PMCB Mcb, + _In_ POOL_TYPE PoolType); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlUninitializeMcb( - IN PMCB Mcb); + _Inout_ PMCB Mcb); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlTruncateMcb( - IN PMCB Mcb, - IN VBN Vbn); + _Inout_ PMCB Mcb, + _In_ VBN Vbn); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlAddMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - IN LBN Lbn, - IN ULONG SectorCount); + _Inout_ PMCB Mcb, + _In_ VBN Vbn, + _In_ LBN Lbn, + _In_ ULONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlRemoveMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - IN ULONG SectorCount); + _Inout_ PMCB Mcb, + _In_ VBN Vbn, + _In_ ULONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupMcbEntry( - IN PMCB Mcb, - IN VBN Vbn, - OUT PLBN Lbn, - OUT PULONG SectorCount OPTIONAL, - OUT PULONG Index); + _In_ PMCB Mcb, + _In_ VBN Vbn, + _Out_ PLBN Lbn, + _Out_opt_ PULONG SectorCount, + _Out_ PULONG Index); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLastMcbEntry( - IN PMCB Mcb, - OUT PVBN Vbn, - OUT PLBN Lbn); + _In_ PMCB Mcb, + _Out_ PVBN Vbn, + _Out_ PLBN Lbn); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI ULONG NTAPI FsRtlNumberOfRunsInMcb( - IN PMCB Mcb); + _In_ PMCB Mcb); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlGetNextMcbEntry( - IN PMCB Mcb, - IN ULONG RunIndex, - OUT PVBN Vbn, - OUT PLBN Lbn, - OUT PULONG SectorCount); + _In_ PMCB Mcb, + _In_ ULONG RunIndex, + _Out_ PVBN Vbn, + _Out_ PLBN Lbn, + _Out_ PULONG SectorCount); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlBalanceReads( - IN PDEVICE_OBJECT TargetDevice); + _In_ PDEVICE_OBJECT TargetDevice); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlInitializeOplock( - IN OUT POPLOCK Oplock); + _Inout_ POPLOCK Oplock); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlUninitializeOplock( - IN OUT POPLOCK Oplock); + _Inout_ POPLOCK Oplock); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlOplockFsctrl( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG OpenCount); + _In_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_ ULONG OpenCount); +_When_(CompletionRoutine != NULL, _Must_inspect_result_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlCheckOplock( - IN POPLOCK Oplock, - IN PIRP Irp, - IN PVOID Context, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); + _In_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_opt_ PVOID Context, + _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine, + _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlOplockIsFastIoPossible( - IN POPLOCK Oplock); + _In_ POPLOCK Oplock); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCurrentBatchOplock( - IN POPLOCK Oplock); + _In_ POPLOCK Oplock); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlNotifyVolumeEvent( - IN PFILE_OBJECT FileObject, - IN ULONG EventCode); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG EventCode); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyInitializeSync( - IN PNOTIFY_SYNC *NotifySync); + _In_ PNOTIFY_SYNC *NotifySync); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyUninitializeSync( - IN PNOTIFY_SYNC *NotifySync); + _In_ PNOTIFY_SYNC *NotifySync); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyFullChangeDirectory( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext, - IN PSTRING FullDirectoryName, - IN BOOLEAN WatchTree, - IN BOOLEAN IgnoreBuffer, - IN ULONG CompletionFilter, - IN PIRP NotifyIrp OPTIONAL, - IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList, + _In_ PVOID FsContext, + _In_ PSTRING FullDirectoryName, + _In_ BOOLEAN WatchTree, + _In_ BOOLEAN IgnoreBuffer, + _In_ ULONG CompletionFilter, + _In_opt_ PIRP NotifyIrp, + _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback, + _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyFilterReportChange( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PSTRING FullTargetName, - IN USHORT TargetNameOffset, - IN PSTRING StreamName OPTIONAL, - IN PSTRING NormalizedParentName OPTIONAL, - IN ULONG FilterMatch, - IN ULONG Action, - IN PVOID TargetContext OPTIONAL, - IN PVOID FilterContext OPTIONAL); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList, + _In_ PSTRING FullTargetName, + _In_ USHORT TargetNameOffset, + _In_opt_ PSTRING StreamName, + _In_opt_ PSTRING NormalizedParentName, + _In_ ULONG FilterMatch, + _In_ ULONG Action, + _In_opt_ PVOID TargetContext, + _In_opt_ PVOID FilterContext); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyFullReportChange( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PSTRING FullTargetName, - IN USHORT TargetNameOffset, - IN PSTRING StreamName OPTIONAL, - IN PSTRING NormalizedParentName OPTIONAL, - IN ULONG FilterMatch, - IN ULONG Action, - IN PVOID TargetContext OPTIONAL); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList, + _In_ PSTRING FullTargetName, + _In_ USHORT TargetNameOffset, + _In_opt_ PSTRING StreamName, + _In_opt_ PSTRING NormalizedParentName, + _In_ ULONG FilterMatch, + _In_ ULONG Action, + _In_opt_ PVOID TargetContext); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyCleanup( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList, + _In_ PVOID FsContext); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlDissectName( - IN UNICODE_STRING Name, - OUT PUNICODE_STRING FirstPart, - OUT PUNICODE_STRING RemainingPart); + _In_ UNICODE_STRING Name, + _Out_ PUNICODE_STRING FirstPart, + _Out_ PUNICODE_STRING RemainingPart); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlDoesNameContainWildCards( - IN PUNICODE_STRING Name); + _In_ PUNICODE_STRING Name); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlAreNamesEqual( - IN PCUNICODE_STRING Name1, - IN PCUNICODE_STRING Name2, - IN BOOLEAN IgnoreCase, - IN PCWCH UpcaseTable OPTIONAL); + _In_ PCUNICODE_STRING Name1, + _In_ PCUNICODE_STRING Name2, + _In_ BOOLEAN IgnoreCase, + _In_reads_opt_(0x10000) PCWCH UpcaseTable); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsNameInExpression( - IN PUNICODE_STRING Expression, - IN PUNICODE_STRING Name, - IN BOOLEAN IgnoreCase, - IN PWCHAR UpcaseTable OPTIONAL); + _In_ PUNICODE_STRING Expression, + _In_ PUNICODE_STRING Name, + _In_ BOOLEAN IgnoreCase, + _In_opt_ PWCHAR UpcaseTable); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI FsRtlPostPagingFileStackOverflow( - IN PVOID Context, - IN PKEVENT Event, - IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); + _In_ PVOID Context, + _In_ PKEVENT Event, + _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI FsRtlPostStackOverflow ( - IN PVOID Context, - IN PKEVENT Event, - IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); + _In_ PVOID Context, + _In_ PKEVENT Event, + _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlRegisterUncProvider( - OUT PHANDLE MupHandle, - IN PUNICODE_STRING RedirectorDeviceName, - IN BOOLEAN MailslotsSupported); + _Out_ PHANDLE MupHandle, + _In_ PUNICODE_STRING RedirectorDeviceName, + _In_ BOOLEAN MailslotsSupported); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlDeregisterUncProvider( - IN HANDLE Handle); + _In_ HANDLE Handle); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlTeardownPerStreamContexts( - IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); + _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlCreateSectionForDataScan( - OUT PHANDLE SectionHandle, - OUT PVOID *SectionObject, - OUT PLARGE_INTEGER SectionFileSize OPTIONAL, - IN PFILE_OBJECT FileObject, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PLARGE_INTEGER MaximumSize OPTIONAL, - IN ULONG SectionPageProtection, - IN ULONG AllocationAttributes, - IN ULONG Flags); + _Out_ PHANDLE SectionHandle, + _Outptr_ PVOID *SectionObject, + _Out_opt_ PLARGE_INTEGER SectionFileSize, + _In_ PFILE_OBJECT FileObject, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PLARGE_INTEGER MaximumSize, + _In_ ULONG SectionPageProtection, + _In_ ULONG AllocationAttributes, + _In_ ULONG Flags); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyFilterChangeDirectory( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList, - IN PVOID FsContext, - IN PSTRING FullDirectoryName, - IN BOOLEAN WatchTree, - IN BOOLEAN IgnoreBuffer, - IN ULONG CompletionFilter, - IN PIRP NotifyIrp OPTIONAL, - IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL, - IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList, + _In_ PVOID FsContext, + _In_ PSTRING FullDirectoryName, + _In_ BOOLEAN WatchTree, + _In_ BOOLEAN IgnoreBuffer, + _In_ ULONG CompletionFilter, + _In_opt_ PIRP NotifyIrp, + _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback, + _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext, + _In_opt_ PFILTER_REPORT_CHANGE FilterCallback); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlInsertPerStreamContext( - IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext, - IN PFSRTL_PER_STREAM_CONTEXT Ptr); + _In_ PFSRTL_ADVANCED_FCB_HEADER PerStreamContext, + _In_ PFSRTL_PER_STREAM_CONTEXT Ptr); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_STREAM_CONTEXT NTAPI FsRtlLookupPerStreamContextInternal( - IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_STREAM_CONTEXT NTAPI FsRtlRemovePerStreamContext( - IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); NTKERNELAPI VOID @@ -7295,548 +7711,639 @@ FsRtlIncrementCcFastReadNotPossible( NTKERNELAPI VOID NTAPI -FsRtlIncrementCcFastReadWait( - VOID); +FsRtlIncrementCcFastReadWait(VOID); NTKERNELAPI VOID NTAPI -FsRtlIncrementCcFastReadNoWait( - VOID); +FsRtlIncrementCcFastReadNoWait(VOID); NTKERNELAPI VOID NTAPI -FsRtlIncrementCcFastReadResourceMiss( - VOID); +FsRtlIncrementCcFastReadResourceMiss(VOID); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI LOGICAL NTAPI FsRtlIsPagingFile( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlInitializeBaseMcb( - IN PBASE_MCB Mcb, - IN POOL_TYPE PoolType); + _Out_ PBASE_MCB Mcb, + _In_ POOL_TYPE PoolType); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlUninitializeBaseMcb( - IN PBASE_MCB Mcb); + _In_ PBASE_MCB Mcb); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlResetBaseMcb( - IN PBASE_MCB Mcb); + _Out_ PBASE_MCB Mcb); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlTruncateBaseMcb( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn); + _Inout_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlAddBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); + _Inout_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG Lbn, + _In_ LONGLONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlRemoveBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount); + _Inout_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupBaseMcbEntry( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL); + _In_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn, + _Out_opt_ PLONGLONG Lbn, + _Out_opt_ PLONGLONG SectorCountFromLbn, + _Out_opt_ PLONGLONG StartingLbn, + _Out_opt_ PLONGLONG SectorCountFromStartingLbn, + _Out_opt_ PULONG Index); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntry( - IN PBASE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn); + _In_ PBASE_MCB Mcb, + _Out_ PLONGLONG Vbn, + _Out_ PLONGLONG Lbn); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlLookupLastBaseMcbEntryAndIndex( - IN PBASE_MCB OpaqueMcb, - IN OUT PLONGLONG LargeVbn, - IN OUT PLONGLONG LargeLbn, - IN OUT PULONG Index); + _In_ PBASE_MCB OpaqueMcb, + _Inout_ PLONGLONG LargeVbn, + _Inout_ PLONGLONG LargeLbn, + _Inout_ PULONG Index); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI ULONG NTAPI FsRtlNumberOfRunsInBaseMcb( - IN PBASE_MCB Mcb); + _In_ PBASE_MCB Mcb); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlGetNextBaseMcbEntry( - IN PBASE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount); + _In_ PBASE_MCB Mcb, + _In_ ULONG RunIndex, + _Out_ PLONGLONG Vbn, + _Out_ PLONGLONG Lbn, + _Out_ PLONGLONG SectorCount); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlSplitBaseMcb( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount); + _Inout_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG Amount); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_When_(!Flags & MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE, _Must_inspect_result_) +_IRQL_requires_max_(APC_LEVEL) BOOLEAN NTAPI FsRtlInitializeBaseMcbEx( - IN PBASE_MCB Mcb, - IN POOL_TYPE PoolType, - IN USHORT Flags); + _Out_ PBASE_MCB Mcb, + _In_ POOL_TYPE PoolType, + _In_ USHORT Flags); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTSTATUS NTAPI FsRtlAddBaseMcbEntryEx( - IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount); + _Inout_ PBASE_MCB Mcb, + _In_ LONGLONG Vbn, + _In_ LONGLONG Lbn, + _In_ LONGLONG SectorCount); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCurrentOplock( - IN POPLOCK Oplock); + _In_ POPLOCK Oplock); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlOplockBreakToNone( - IN OUT POPLOCK Oplock, - IN PIO_STACK_LOCATION IrpSp OPTIONAL, - IN PIRP Irp, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); + _Inout_ POPLOCK Oplock, + _In_opt_ PIO_STACK_LOCATION IrpSp, + _In_ PIRP Irp, + _In_opt_ PVOID Context, + _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine, + _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlNotifyVolumeEventEx( - IN PFILE_OBJECT FileObject, - IN ULONG EventCode, - IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG EventCode, + _In_ PTARGET_DEVICE_CUSTOM_NOTIFICATION Event); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlNotifyCleanupAll( - IN PNOTIFY_SYNC NotifySync, - IN PLIST_ENTRY NotifyList); + _In_ PNOTIFY_SYNC NotifySync, + _In_ PLIST_ENTRY NotifyList); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTAPI FsRtlRegisterUncProviderEx( - OUT PHANDLE MupHandle, - IN PUNICODE_STRING RedirDevName, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG Flags); + _Out_ PHANDLE MupHandle, + _In_ PUNICODE_STRING RedirDevName, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG Flags); +_Must_inspect_result_ +_When_(Irp!=NULL, _IRQL_requires_max_(PASSIVE_LEVEL)) +_When_(Irp==NULL, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI NTSTATUS NTAPI FsRtlCancellableWaitForSingleObject( - IN PVOID Object, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PIRP Irp OPTIONAL); + _In_ PVOID Object, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PIRP Irp); +_Must_inspect_result_ +_When_(Irp != NULL, _IRQL_requires_max_(PASSIVE_LEVEL)) +_When_(Irp == NULL, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI NTSTATUS NTAPI FsRtlCancellableWaitForMultipleObjects( - IN ULONG Count, - IN PVOID ObjectArray[], - IN WAIT_TYPE WaitType, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PKWAIT_BLOCK WaitBlockArray OPTIONAL, - IN PIRP Irp OPTIONAL); + _In_ ULONG Count, + _In_reads_(Count) PVOID ObjectArray[], + _In_ WAIT_TYPE WaitType, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PKWAIT_BLOCK WaitBlockArray, + _In_opt_ PIRP Irp); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlMupGetProviderInfoFromFileObject( - IN PFILE_OBJECT pFileObject, - IN ULONG Level, - OUT PVOID pBuffer, - IN OUT PULONG pBufferSize); + _In_ PFILE_OBJECT pFileObject, + _In_ ULONG Level, + _Out_writes_bytes_(*pBufferSize) PVOID pBuffer, + _Inout_ PULONG pBufferSize); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlMupGetProviderIdFromName( - IN PUNICODE_STRING pProviderName, - OUT PULONG32 pProviderId); + _In_ PUNICODE_STRING pProviderName, + _Out_ PULONG32 pProviderId); NTKERNELAPI VOID NTAPI -FsRtlIncrementCcFastMdlReadWait( - VOID); +FsRtlIncrementCcFastMdlReadWait(VOID); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlValidateReparsePointBuffer( - IN ULONG BufferLength, - IN PREPARSE_DATA_BUFFER ReparseBuffer); + _In_ ULONG BufferLength, + _In_reads_bytes_(BufferLength) PREPARSE_DATA_BUFFER ReparseBuffer); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlRemoveDotsFromPath( - IN OUT PWSTR OriginalString, - IN USHORT PathLength, - OUT USHORT *NewLength); + _Inout_updates_bytes_(PathLength) PWSTR OriginalString, + _In_ USHORT PathLength, + _Out_ USHORT *NewLength); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlAllocateExtraCreateParameterList( - IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags, - OUT PECP_LIST *EcpList); + _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags, + _Outptr_ PECP_LIST *EcpList); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlFreeExtraCreateParameterList( - IN PECP_LIST EcpList); + _In_ PECP_LIST EcpList); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlAllocateExtraCreateParameter( - IN LPCGUID EcpType, - IN ULONG SizeOfContext, - IN FSRTL_ALLOCATE_ECP_FLAGS Flags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN ULONG PoolTag, - OUT PVOID *EcpContext); + _In_ LPCGUID EcpType, + _In_ ULONG SizeOfContext, + _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags, + _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback, + _In_ ULONG PoolTag, + _Outptr_result_bytebuffer_(SizeOfContext) PVOID *EcpContext); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlFreeExtraCreateParameter( - IN PVOID EcpContext); + _In_ PVOID EcpContext); +_When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI VOID NTAPI FsRtlInitExtraCreateParameterLookasideList( - IN OUT PVOID Lookaside, - IN FSRTL_ECP_LOOKASIDE_FLAGS Flags, - IN SIZE_T Size, - IN ULONG Tag); + _Inout_ PVOID Lookaside, + _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags, + _In_ SIZE_T Size, + _In_ ULONG Tag); +_When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL)) VOID NTAPI FsRtlDeleteExtraCreateParameterLookasideList( - IN OUT PVOID Lookaside, - IN FSRTL_ECP_LOOKASIDE_FLAGS Flags); + _Inout_ PVOID Lookaside, + _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlAllocateExtraCreateParameterFromLookasideList( - IN LPCGUID EcpType, - IN ULONG SizeOfContext, - IN FSRTL_ALLOCATE_ECP_FLAGS Flags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN OUT PVOID LookasideList, - OUT PVOID *EcpContext); + _In_ LPCGUID EcpType, + ULONG SizeOfContext, + _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags, + _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback, + _Inout_ PVOID LookasideList, + _Outptr_ PVOID *EcpContext); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlInsertExtraCreateParameter( - IN OUT PECP_LIST EcpList, - IN OUT PVOID EcpContext); + _Inout_ PECP_LIST EcpList, + _Inout_ PVOID EcpContext); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlFindExtraCreateParameter( - IN PECP_LIST EcpList, - IN LPCGUID EcpType, - OUT PVOID *EcpContext OPTIONAL, - OUT ULONG *EcpContextSize OPTIONAL); + _In_ PECP_LIST EcpList, + _In_ LPCGUID EcpType, + _Outptr_opt_ PVOID *EcpContext, + _Out_opt_ ULONG *EcpContextSize); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlRemoveExtraCreateParameter( - IN OUT PECP_LIST EcpList, - IN LPCGUID EcpType, - OUT PVOID *EcpContext, - OUT ULONG *EcpContextSize OPTIONAL); + _Inout_ PECP_LIST EcpList, + _In_ LPCGUID EcpType, + _Outptr_ PVOID *EcpContext, + _Out_opt_ ULONG *EcpContextSize); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlGetEcpListFromIrp( - IN PIRP Irp, - OUT PECP_LIST *EcpList OPTIONAL); + _In_ PIRP Irp, + _Outptr_result_maybenull_ PECP_LIST *EcpList); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlSetEcpListIntoIrp( - IN OUT PIRP Irp, - IN PECP_LIST EcpList); + _Inout_ PIRP Irp, + _In_ PECP_LIST EcpList); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlGetNextExtraCreateParameter( - IN PECP_LIST EcpList, - IN PVOID CurrentEcpContext OPTIONAL, - OUT LPGUID NextEcpType OPTIONAL, - OUT PVOID *NextEcpContext OPTIONAL, - OUT ULONG *NextEcpContextSize OPTIONAL); + _In_ PECP_LIST EcpList, + _In_opt_ PVOID CurrentEcpContext, + _Out_opt_ LPGUID NextEcpType, + _Outptr_opt_ PVOID *NextEcpContext, + _Out_opt_ ULONG *NextEcpContextSize); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlAcknowledgeEcp( - IN PVOID EcpContext); + _In_ PVOID EcpContext); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsEcpAcknowledged( - IN PVOID EcpContext); + _In_ PVOID EcpContext); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlIsEcpFromUserMode( - IN PVOID EcpContext); + _In_ PVOID EcpContext); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlChangeBackingFileObject( - IN PFILE_OBJECT CurrentFileObject OPTIONAL, - IN PFILE_OBJECT NewFileObject, - IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType, - IN ULONG Flags); + _In_opt_ PFILE_OBJECT CurrentFileObject, + _In_ PFILE_OBJECT NewFileObject, + _In_ FSRTL_CHANGE_BACKING_TYPE ChangeBackingType, + _In_ ULONG Flags); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlLogCcFlushError( - IN PUNICODE_STRING FileName, - IN PDEVICE_OBJECT DeviceObject, - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN NTSTATUS FlushError, - IN ULONG Flags); + _In_ PUNICODE_STRING FileName, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_ NTSTATUS FlushError, + _In_ ULONG Flags); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI -FsRtlAreVolumeStartupApplicationsComplete( - VOID); +FsRtlAreVolumeStartupApplicationsComplete(VOID); NTKERNELAPI ULONG NTAPI -FsRtlQueryMaximumVirtualDiskNestingLevel( - VOID); +FsRtlQueryMaximumVirtualDiskNestingLevel(VOID); NTKERNELAPI NTSTATUS NTAPI FsRtlGetVirtualDiskNestingLevel( - IN PDEVICE_OBJECT DeviceObject, - OUT PULONG NestingLevel, - OUT PULONG NestingFlags OPTIONAL); + _In_ PDEVICE_OBJECT DeviceObject, + _Out_ PULONG NestingLevel, + _Out_opt_ PULONG NestingFlags); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_VISTASP1) +_When_(Flags | OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, _Must_inspect_result_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlCheckOplockEx( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); + _In_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_ ULONG Flags, + _In_opt_ PVOID Context, + _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine, + _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine); #endif #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlAreThereCurrentOrInProgressFileLocks( - IN PFILE_LOCK FileLock); + _In_ PFILE_LOCK FileLock); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlOplockIsSharedRequest( - IN PIRP Irp); + _In_ PIRP Irp); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlOplockBreakH( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); + _In_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_ ULONG Flags, + _In_opt_ PVOID Context, + _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine, + _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlCurrentOplockH( - IN POPLOCK Oplock); + _In_ POPLOCK Oplock); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlOplockBreakToNoneEx( - IN OUT POPLOCK Oplock, - IN PIRP Irp, - IN ULONG Flags, - IN PVOID Context OPTIONAL, - IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, - IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL); + _Inout_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_ ULONG Flags, + _In_opt_ PVOID Context, + _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine, + _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlOplockFsctrlEx( - IN POPLOCK Oplock, - IN PIRP Irp, - IN ULONG OpenCount, - IN ULONG Flags); + _In_ POPLOCK Oplock, + _In_ PIRP Irp, + _In_ ULONG OpenCount, + _In_ ULONG Flags); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI BOOLEAN NTAPI FsRtlOplockKeysEqual( - IN PFILE_OBJECT Fo1 OPTIONAL, - IN PFILE_OBJECT Fo2 OPTIONAL); + _In_opt_ PFILE_OBJECT Fo1, + _In_opt_ PFILE_OBJECT Fo2); NTKERNELAPI NTSTATUS NTAPI FsRtlInitializeExtraCreateParameterList( - IN OUT PECP_LIST EcpList); + _Inout_ PECP_LIST EcpList); NTKERNELAPI VOID NTAPI FsRtlInitializeExtraCreateParameter( - IN PECP_HEADER Ecp, - IN ULONG EcpFlags, - IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL, - IN ULONG TotalSize, - IN LPCGUID EcpType, - IN PVOID ListAllocatedFrom OPTIONAL); + _Out_ PECP_HEADER Ecp, + _In_ ULONG EcpFlags, + _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback, + _In_ ULONG TotalSize, + _In_ LPCGUID EcpType, + _In_opt_ PVOID ListAllocatedFrom); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlInsertPerFileContext( - IN PVOID* PerFileContextPointer, - IN PFSRTL_PER_FILE_CONTEXT Ptr); + _In_ PVOID* PerFileContextPointer, + _In_ PFSRTL_PER_FILE_CONTEXT Ptr); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_FILE_CONTEXT NTAPI FsRtlLookupPerFileContext( - IN PVOID* PerFileContextPointer, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PVOID* PerFileContextPointer, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_FILE_CONTEXT NTAPI FsRtlRemovePerFileContext( - IN PVOID* PerFileContextPointer, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PVOID* PerFileContextPointer, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI FsRtlTeardownPerFileContexts( - IN PVOID* PerFileContextPointer); + _In_ PVOID* PerFileContextPointer); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI FsRtlInsertPerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr); + _In_ PFILE_OBJECT FileObject, + _In_ PFSRTL_PER_FILEOBJECT_CONTEXT Ptr); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_FILEOBJECT_CONTEXT NTAPI FsRtlLookupPerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PFILE_OBJECT FileObject, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PFSRTL_PER_FILEOBJECT_CONTEXT NTAPI FsRtlRemovePerFileObjectContext( - IN PFILE_OBJECT FileObject, - IN PVOID OwnerId OPTIONAL, - IN PVOID InstanceId OPTIONAL); + _In_ PFILE_OBJECT FileObject, + _In_opt_ PVOID OwnerId, + _In_opt_ PVOID InstanceId); #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \ FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \ @@ -7954,12 +8461,13 @@ extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray; FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \ NULL) +_IRQL_requires_max_(APC_LEVEL) FORCEINLINE VOID NTAPI FsRtlSetupAdvancedHeader( - IN PVOID AdvHdr, - IN PFAST_MUTEX FMutex ) + _In_ PVOID AdvHdr, + _In_ PFAST_MUTEX FMutex ) { PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr; @@ -8007,21 +8515,21 @@ typedef struct _CC_FILE_SIZES { typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) ( - IN PVOID Context, - IN BOOLEAN Wait); + _In_ PVOID Context, + _In_ BOOLEAN Wait); typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) ( - IN PVOID Context); + _In_ PVOID Context); typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) ( - IN PVOID Context, - IN BOOLEAN Wait); + _In_ PVOID Context, + _In_ BOOLEAN Wait); typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) ( - IN PVOID Context); + _In_ PVOID Context); typedef struct _CACHE_MANAGER_CALLBACKS { PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite; @@ -8037,23 +8545,23 @@ typedef struct _CACHE_UNINITIALIZE_EVENT { typedef VOID (NTAPI *PDIRTY_PAGE_ROUTINE) ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN PLARGE_INTEGER OldestLsn, - IN PLARGE_INTEGER NewestLsn, - IN PVOID Context1, - IN PVOID Context2); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ PLARGE_INTEGER OldestLsn, + _In_ PLARGE_INTEGER NewestLsn, + _In_ PVOID Context1, + _In_ PVOID Context2); typedef VOID (NTAPI *PFLUSH_TO_LSN) ( - IN PVOID LogHandle, - IN LARGE_INTEGER Lsn); + _In_ PVOID LogHandle, + _In_ LARGE_INTEGER Lsn); typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) ( - IN PVOID Context1, - IN PVOID Context2); + _In_ PVOID Context1, + _In_ PVOID Context2); #define UNINITIALIZE_CACHE_MAPS (1) #define DO_NOT_RETRY_PURGE (2) @@ -8075,19 +8583,19 @@ NTKERNELAPI VOID NTAPI CcInitializeCacheMap( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes, - IN BOOLEAN PinAccess, - IN PCACHE_MANAGER_CALLBACKS Callbacks, - IN PVOID LazyWriteContext); + _In_ PFILE_OBJECT FileObject, + _In_ PCC_FILE_SIZES FileSizes, + _In_ BOOLEAN PinAccess, + _In_ PCACHE_MANAGER_CALLBACKS Callbacks, + _In_ PVOID LazyWriteContext); NTKERNELAPI BOOLEAN NTAPI CcUninitializeCacheMap( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER TruncateSize OPTIONAL, - IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL); + _In_ PFILE_OBJECT FileObject, + _In_opt_ PLARGE_INTEGER TruncateSize, + _In_opt_ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent); NTKERNELAPI VOID @@ -8100,256 +8608,255 @@ NTKERNELAPI VOID NTAPI CcSetDirtyPageThreshold( - IN PFILE_OBJECT FileObject, - IN ULONG DirtyPageThreshold); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG DirtyPageThreshold); NTKERNELAPI VOID NTAPI CcFlushCache( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - OUT PIO_STATUS_BLOCK IoStatus OPTIONAL); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_opt_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _Out_opt_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI LARGE_INTEGER NTAPI CcGetFlushedValidData( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN BOOLEAN BcbListHeld); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_ BOOLEAN BcbListHeld); NTKERNELAPI BOOLEAN NTAPI CcZeroData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER StartOffset, - IN PLARGE_INTEGER EndOffset, - IN BOOLEAN Wait); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER StartOffset, + _In_ PLARGE_INTEGER EndOffset, + _In_ BOOLEAN Wait); NTKERNELAPI PVOID NTAPI CcRemapBcb( - IN PVOID Bcb); + _In_ PVOID Bcb); NTKERNELAPI VOID NTAPI CcRepinBcb( - IN PVOID Bcb); + _In_ PVOID Bcb); NTKERNELAPI VOID NTAPI CcUnpinRepinnedBcb( - IN PVOID Bcb, - IN BOOLEAN WriteThrough, - OUT PIO_STATUS_BLOCK IoStatus); + _In_ PVOID Bcb, + _In_ BOOLEAN WriteThrough, + _Out_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI PFILE_OBJECT NTAPI CcGetFileObjectFromSectionPtrs( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer); NTKERNELAPI PFILE_OBJECT NTAPI CcGetFileObjectFromBcb( - IN PVOID Bcb); + _In_ PVOID Bcb); NTKERNELAPI BOOLEAN NTAPI CcCanIWrite( - IN PFILE_OBJECT FileObject, - IN ULONG BytesToWrite, - IN BOOLEAN Wait, - IN BOOLEAN Retrying); + _In_opt_ PFILE_OBJECT FileObject, + _In_ ULONG BytesToWrite, + _In_ BOOLEAN Wait, + _In_ BOOLEAN Retrying); NTKERNELAPI VOID NTAPI CcDeferWrite( - IN PFILE_OBJECT FileObject, - IN PCC_POST_DEFERRED_WRITE PostRoutine, - IN PVOID Context1, - IN PVOID Context2, - IN ULONG BytesToWrite, - IN BOOLEAN Retrying); + _In_ PFILE_OBJECT FileObject, + _In_ PCC_POST_DEFERRED_WRITE PostRoutine, + _In_ PVOID Context1, + _In_ PVOID Context2, + _In_ ULONG BytesToWrite, + _In_ BOOLEAN Retrying); NTKERNELAPI BOOLEAN NTAPI CcCopyRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _Out_writes_bytes_(Length) PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI VOID NTAPI CcFastCopyRead( - IN PFILE_OBJECT FileObject, - IN ULONG FileOffset, - IN ULONG Length, - IN ULONG PageCount, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG FileOffset, + _In_ ULONG Length, + _In_ ULONG PageCount, + _Out_writes_bytes_(Length) PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI BOOLEAN NTAPI CcCopyWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN PVOID Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_reads_bytes_(Length) PVOID Buffer); NTKERNELAPI VOID NTAPI CcFastCopyWrite( - IN PFILE_OBJECT FileObject, - IN ULONG FileOffset, - IN ULONG Length, - IN PVOID Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG FileOffset, + _In_ ULONG Length, + _In_reads_bytes_(Length) PVOID Buffer); NTKERNELAPI VOID NTAPI CcMdlRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI VOID NTAPI CcMdlReadComplete( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain); + _In_ PFILE_OBJECT FileObject, + _In_ PMDL MdlChain); NTKERNELAPI VOID NTAPI CcPrepareMdlWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus); NTKERNELAPI VOID NTAPI CcMdlWriteComplete( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PMDL MdlChain); NTKERNELAPI VOID NTAPI CcScheduleReadAhead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length); NTKERNELAPI NTSTATUS NTAPI -CcWaitForCurrentLazyWriterActivity( - VOID); +CcWaitForCurrentLazyWriterActivity(VOID); NTKERNELAPI VOID NTAPI CcSetReadAheadGranularity( - IN PFILE_OBJECT FileObject, - IN ULONG Granularity); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG Granularity); NTKERNELAPI BOOLEAN NTAPI CcPinRead( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG Flags, + _Outptr_ PVOID *Bcb, + _Outptr_result_bytebuffer_(Length) PVOID *Buffer); NTKERNELAPI BOOLEAN NTAPI CcPinMappedData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - IN OUT PVOID *Bcb); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG Flags, + _Inout_ PVOID *Bcb); NTKERNELAPI BOOLEAN NTAPI CcPreparePinWrite( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Zero, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Zero, + _In_ ULONG Flags, + _Outptr_ PVOID *Bcb, + _Outptr_result_bytebuffer_(Length) PVOID *Buffer); NTKERNELAPI VOID NTAPI CcSetDirtyPinnedData( - IN PVOID BcbVoid, - IN PLARGE_INTEGER Lsn OPTIONAL); + _In_ PVOID BcbVoid, + _In_opt_ PLARGE_INTEGER Lsn); NTKERNELAPI VOID NTAPI CcUnpinData( - IN PVOID Bcb); + _In_ PVOID Bcb); NTKERNELAPI VOID NTAPI CcSetBcbOwnerPointer( - IN PVOID Bcb, - IN PVOID OwnerPointer); + _In_ PVOID Bcb, + _In_ PVOID OwnerPointer); NTKERNELAPI VOID NTAPI CcUnpinDataForThread( - IN PVOID Bcb, - IN ERESOURCE_THREAD ResourceThreadId); + _In_ PVOID Bcb, + _In_ ERESOURCE_THREAD ResourceThreadId); NTKERNELAPI VOID NTAPI CcSetAdditionalCacheAttributes( - IN PFILE_OBJECT FileObject, - IN BOOLEAN DisableReadAhead, - IN BOOLEAN DisableWriteBehind); + _In_ PFILE_OBJECT FileObject, + _In_ BOOLEAN DisableReadAhead, + _In_ BOOLEAN DisableWriteBehind); NTKERNELAPI BOOLEAN NTAPI CcIsThereDirtyData( - IN PVPB Vpb); + _In_ PVPB Vpb); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -8359,25 +8866,25 @@ NTKERNELAPI VOID NTAPI CcMdlWriteAbort( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain); + _In_ PFILE_OBJECT FileObject, + _In_ PMDL MdlChain); NTKERNELAPI VOID NTAPI CcSetLogHandleForFile( - IN PFILE_OBJECT FileObject, - IN PVOID LogHandle, - IN PFLUSH_TO_LSN FlushToLsnRoutine); + _In_ PFILE_OBJECT FileObject, + _In_ PVOID LogHandle, + _In_ PFLUSH_TO_LSN FlushToLsnRoutine); NTKERNELAPI LARGE_INTEGER NTAPI CcGetDirtyPages( - IN PVOID LogHandle, - IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, - IN PVOID Context1, - IN PVOID Context2); + _In_ PVOID LogHandle, + _In_ PDIRTY_PAGE_ROUTINE DirtyPageRoutine, + _In_ PVOID Context1, + _In_ PVOID Context2); #endif @@ -8386,23 +8893,23 @@ NTKERNELAPI BOOLEAN NTAPI CcMapData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG Flags, - OUT PVOID *Bcb, - OUT PVOID *Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG Flags, + _Outptr_ PVOID *Bcb, + _Outptr_result_bytebuffer_(Length) PVOID *Buffer); #elif (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI BOOLEAN NTAPI CcMapData( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID *Bcb, - OUT PVOID *Buffer); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _Outptr_ PVOID *Bcb, + _Outptr_result_bytebuffer_(Length) PVOID *Buffer); #endif #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -8411,27 +8918,27 @@ NTKERNELAPI NTSTATUS NTAPI CcSetFileSizesEx( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes); + _In_ PFILE_OBJECT FileObject, + _In_ PCC_FILE_SIZES FileSizes); NTKERNELAPI PFILE_OBJECT NTAPI CcGetFileObjectFromSectionPtrsRef( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer); NTKERNELAPI VOID NTAPI CcSetParallelFlushFile( - IN PFILE_OBJECT FileObject, - IN BOOLEAN EnableParallelFlush); + _In_ PFILE_OBJECT FileObject, + _In_ BOOLEAN EnableParallelFlush); NTKERNELAPI BOOLEAN CcIsThereDirtyDataEx( - IN PVPB Vpb, - IN PULONG NumberOfDirtyPages OPTIONAL); + _In_ PVPB Vpb, + _In_opt_ PULONG NumberOfDirtyPages); #endif @@ -8440,11 +8947,11 @@ NTKERNELAPI VOID NTAPI CcCoherencyFlushAndPurgeCache( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - OUT PIO_STATUS_BLOCK IoStatus, - IN ULONG Flags OPTIONAL); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_opt_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_opt_ ULONG Flags); #endif #define CcGetFileSizePointer(FO) ( \ @@ -8456,19 +8963,19 @@ NTKERNELAPI BOOLEAN NTAPI CcPurgeCacheSection( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - IN ULONG Flags); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_opt_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG Flags); #elif (NTDDI_VERSION >= NTDDI_WIN2K) NTKERNELAPI BOOLEAN NTAPI CcPurgeCacheSection( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - IN BOOLEAN UninitializeCacheMaps); + _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer, + _In_opt_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN UninitializeCacheMaps); #endif #if (NTDDI_VERSION >= NTDDI_WIN7) @@ -8476,9 +8983,9 @@ NTKERNELAPI BOOLEAN NTAPI CcCopyWriteWontFlush( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length); + _In_ PFILE_OBJECT FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length); #else #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000) #endif @@ -8494,307 +9001,339 @@ CcCopyWriteWontFlush( +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryEaFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN BOOLEAN ReturnSingleEntry, - IN PVOID EaList OPTIONAL, - IN ULONG EaListLength, - IN PULONG EaIndex OPTIONAL, - IN BOOLEAN RestartScan); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ BOOLEAN ReturnSingleEntry, + _In_reads_bytes_opt_(EaListLength) PVOID EaList, + _In_ ULONG EaListLength, + _In_opt_ PULONG EaIndex, + _In_ BOOLEAN RestartScan); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetEaFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDuplicateToken( - IN HANDLE ExistingTokenHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN BOOLEAN EffectiveOnly, - IN TOKEN_TYPE TokenType, - OUT PHANDLE NewTokenHandle); + _In_ HANDLE ExistingTokenHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN EffectiveOnly, + _In_ TOKEN_TYPE TokenType, + _Out_ PHANDLE NewTokenHandle); #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryObject( - IN HANDLE Handle OPTIONAL, - IN OBJECT_INFORMATION_CLASS ObjectInformationClass, - OUT PVOID ObjectInformation OPTIONAL, - IN ULONG ObjectInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_opt_ HANDLE Handle, + _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass, + _Out_writes_bytes_opt_(ObjectInformationLength) PVOID ObjectInformation, + _In_ ULONG ObjectInformationLength, + _Out_opt_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwNotifyChangeKey( - IN HANDLE KeyHandle, - IN HANDLE EventHandle OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG NotifyFilter, - IN BOOLEAN WatchSubtree, - OUT PVOID Buffer, - IN ULONG BufferLength, - IN BOOLEAN Asynchronous); + _In_ HANDLE KeyHandle, + _In_opt_ HANDLE EventHandle, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG NotifyFilter, + _In_ BOOLEAN WatchSubtree, + _Out_writes_bytes_opt_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength, + _In_ BOOLEAN Asynchronous); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwCreateEvent( - OUT PHANDLE EventHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN EVENT_TYPE EventType, - IN BOOLEAN InitialState); + _Out_ PHANDLE EventHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ EVENT_TYPE EventType, + _In_ BOOLEAN InitialState); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDeleteFile( - IN POBJECT_ATTRIBUTES ObjectAttributes); + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryDirectoryFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass, - IN BOOLEAN ReturnSingleEntry, - IN PUNICODE_STRING FileName OPTIONAL, - IN BOOLEAN RestartScan); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass, + _In_ BOOLEAN ReturnSingleEntry, + _In_opt_ PUNICODE_STRING FileName, + _In_ BOOLEAN RestartScan); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetVolumeInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FsInformation, - IN ULONG Length, - IN FS_INFORMATION_CLASS FsInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID FsInformation, + _In_ ULONG Length, + _In_ FS_INFORMATION_CLASS FsInformationClass); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwFsControlFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG FsControlCode, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG FsControlCode, + _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, + _In_ ULONG OutputBufferLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDuplicateObject( - IN HANDLE SourceProcessHandle, - IN HANDLE SourceHandle, - IN HANDLE TargetProcessHandle OPTIONAL, - OUT PHANDLE TargetHandle OPTIONAL, - IN ACCESS_MASK DesiredAccess, - IN ULONG HandleAttributes, - IN ULONG Options); + _In_ HANDLE SourceProcessHandle, + _In_ HANDLE SourceHandle, + _In_opt_ HANDLE TargetProcessHandle, + _Out_opt_ PHANDLE TargetHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG HandleAttributes, + _In_ ULONG Options); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenDirectoryObject( - OUT PHANDLE DirectoryHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE DirectoryHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(return==0, __drv_allocatesMem(Region)) NTSYSAPI NTSTATUS NTAPI ZwAllocateVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN ULONG_PTR ZeroBits, - IN OUT PSIZE_T RegionSize, - IN ULONG AllocationType, - IN ULONG Protect); + _In_ HANDLE ProcessHandle, + _Inout_ PVOID *BaseAddress, + _In_ ULONG_PTR ZeroBits, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG AllocationType, + _In_ ULONG Protect); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(return==0, __drv_freesMem(Region)) NTSYSAPI NTSTATUS NTAPI ZwFreeVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN OUT PSIZE_T RegionSize, - IN ULONG FreeType); + _In_ HANDLE ProcessHandle, + _Inout_ PVOID *BaseAddress, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG FreeType); +_When_(Timeout == NULL, _IRQL_requires_max_(APC_LEVEL)) +_When_(Timeout->QuadPart != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_(Timeout->QuadPart == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) NTSYSAPI NTSTATUS NTAPI ZwWaitForSingleObject( - IN HANDLE Handle, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL); + _In_ HANDLE Handle, + _In_ BOOLEAN Alertable, + _In_opt_ PLARGE_INTEGER Timeout); +_IRQL_requires_max_(DISPATCH_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetEvent( - IN HANDLE EventHandle, - OUT PLONG PreviousState OPTIONAL); + _In_ HANDLE EventHandle, + _Out_opt_ PLONG PreviousState); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwFlushVirtualMemory( - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN OUT PSIZE_T RegionSize, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ HANDLE ProcessHandle, + _Inout_ PVOID *BaseAddress, + _Inout_ PSIZE_T RegionSize, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - OUT PVOID TokenInformation, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Out_writes_bytes_to_opt_(Length,*ResultLength) PVOID TokenInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetSecurityObject( - IN HANDLE Handle, - IN SECURITY_INFORMATION SecurityInformation, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ HANDLE Handle, + _In_ SECURITY_INFORMATION SecurityInformation, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQuerySecurityObject( - IN HANDLE FileHandle, - IN SECURITY_INFORMATION SecurityInformation, - OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE FileHandle, + _In_ SECURITY_INFORMATION SecurityInformation, + _Out_writes_bytes_to_(Length,*ResultLength) PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ ULONG Length, + _Out_ PULONG ResultLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenProcessTokenEx( - IN HANDLE ProcessHandle, - IN ACCESS_MASK DesiredAccess, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); + _In_ HANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG HandleAttributes, + _Out_ PHANDLE TokenHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenThreadTokenEx( - IN HANDLE ThreadHandle, - IN ACCESS_MASK DesiredAccess, - IN BOOLEAN OpenAsSelf, - IN ULONG HandleAttributes, - OUT PHANDLE TokenHandle); + _In_ HANDLE ThreadHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ BOOLEAN OpenAsSelf, + _In_ ULONG HandleAttributes, + _Out_ PHANDLE TokenHandle); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwLockFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key, - IN BOOLEAN FailImmediately, - IN BOOLEAN ExclusiveLock); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ PLARGE_INTEGER ByteOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key, + _In_ BOOLEAN FailImmediately, + _In_ BOOLEAN ExclusiveLock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwUnlockFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER ByteOffset, - IN PLARGE_INTEGER Length, - IN ULONG Key); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ PLARGE_INTEGER ByteOffset, + _In_ PLARGE_INTEGER Length, + _In_ ULONG Key); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN BOOLEAN ReturnSingleEntry, - IN PVOID SidList, - IN ULONG SidListLength, - IN PSID StartSid OPTIONAL, - IN BOOLEAN RestartScan); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ BOOLEAN ReturnSingleEntry, + _In_reads_bytes_opt_(SidListLength) PVOID SidList, + _In_ ULONG SidListLength, + _In_opt_ PSID StartSid, + _In_ BOOLEAN RestartScan); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetQuotaInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwFlushBuffersFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetInformationToken( - IN HANDLE TokenHandle, - IN TOKEN_INFORMATION_CLASS TokenInformationClass, - IN PVOID TokenInformation, - IN ULONG TokenInformationLength); + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _In_reads_bytes_(TokenInformationLength) PVOID TokenInformation, + _In_ ULONG TokenInformationLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #ifndef __SSPI_H__ @@ -10730,16 +11269,6 @@ FsRtlAllocatePoolWithTag ( IN ULONG Tag ); -NTKERNELAPI -BOOLEAN -NTAPI -FsRtlIsFatDbcsLegal ( - IN ANSI_STRING DbcsName, - IN BOOLEAN WildCardsPermissible, - IN BOOLEAN PathNamePermissible, - IN BOOLEAN LeadingBackslashPermissible -); - NTKERNELAPI BOOLEAN NTAPI diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index 2948402116a..2cc168b29b1 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -6,7 +6,7 @@ * This file is part of the ReactOS DDK package. * * Contributors: - * Amine Khaldi + * Amine Khaldi (amine.khaldi@reactos.org) * Timo Kreuzer (timo.kreuzer@reactos.org) * * THIS SOFTWARE IS NOT COPYRIGHTED @@ -67,6 +67,9 @@ typedef GUID *PGUID; #include "intrin.h" +__internal_kernel_driver +__drv_Mode_impl(WDM_INCLUDED) + #ifdef __cplusplus extern "C" { #endif @@ -213,8 +216,8 @@ inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) static __inline__ BOOLEAN InterlockedBitTestAndSet( - IN LONG volatile *Base, - IN LONG Bit) + _Inout_updates_bytes_((Bit+7)/8) _Interlocked_operand_ LONG volatile *Base, + _In_ LONG Bit) { #if defined(_M_IX86) LONG OldBit; @@ -232,8 +235,8 @@ InterlockedBitTestAndSet( static __inline__ BOOLEAN InterlockedBitTestAndReset( - IN LONG volatile *Base, - IN LONG Bit) + _Inout_updates_bytes_((Bit+7)/8) _Interlocked_operand_ LONG volatile *Base, + _In_ LONG Bit) { #if defined(_M_IX86) LONG OldBit; @@ -278,35 +281,35 @@ NTKERNELAPI LONG FASTCALL InterlockedIncrement( - IN OUT LONG volatile *Addend); + _Inout_ _Interlocked_operand_ LONG volatile *Addend); NTKERNELAPI LONG FASTCALL InterlockedDecrement( - IN OUT LONG volatile *Addend); + _Inout_ _Interlocked_operand_ LONG volatile *Addend); NTKERNELAPI LONG FASTCALL InterlockedCompareExchange( - IN OUT LONG volatile *Destination, - IN LONG Exchange, - IN LONG Comparand); + _Inout_ _Interlocked_operand_ LONG volatile *Destination, + _In_ LONG Exchange, + _In_ LONG Comparand); NTKERNELAPI LONG FASTCALL InterlockedExchange( - IN OUT LONG volatile *Destination, - IN LONG Value); + _Inout_ _Interlocked_operand_ LONG volatile *Destination, + _In_ LONG Value); NTKERNELAPI LONG FASTCALL InterlockedExchangeAdd( - IN OUT LONG volatile *Addend, - IN LONG Value); + _Inout_ _Interlocked_operand_ LONG volatile *Addend, + _In_ LONG Value); #else /* !defined(NO_INTERLOCKED_INTRINSICS) */ @@ -384,8 +387,8 @@ InterlockedExchangeAdd( FORCEINLINE LONG64 InterlockedAdd64( - IN OUT LONG64 volatile *Addend, - IN LONG64 Value) + _Inout_ _Interlocked_operand_ LONG64 volatile *Addend, + _In_ LONG64 Value) { return InterlockedExchangeAdd64(Addend, Value) + Value; } @@ -432,14 +435,17 @@ typedef struct _RTL_BITMAP_RUN { ULONG NumberOfBits; } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; +_Function_class_(RTL_QUERY_REGISTRY_ROUTINE) +_IRQL_requires_max_(PASSIVE_LEVEL) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)( - IN PWSTR ValueName, - IN ULONG ValueType, - IN PVOID ValueData, - IN ULONG ValueLength, - IN PVOID Context, - IN PVOID EntryContext); + _In_z_ PWSTR ValueName, + _In_ ULONG ValueType, + _In_reads_bytes_opt_(ValueLength) PVOID ValueData, + _In_ ULONG ValueLength, + _In_opt_ PVOID Context, + _In_opt_ PVOID EntryContext); typedef struct _RTL_QUERY_REGISTRY_TABLE { PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; @@ -557,11 +563,11 @@ extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag; typedef BOOLEAN (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)( - IN ULONG Version); + _In_ ULONG Version); typedef BOOLEAN (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)( - IN ULONG Version); + _In_ ULONG Version); /****************************************************************************** * Kernel Types * @@ -637,7 +643,7 @@ typedef struct _PROCESSOR_RELATIONSHIP { UCHAR Flags; UCHAR Reserved[21]; USHORT GroupCount; - GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; + _Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; typedef struct _NUMA_NODE_RELATIONSHIP { @@ -828,29 +834,31 @@ typedef enum _KBUGCHECK_CALLBACK_REASON { struct _KBUGCHECK_REASON_CALLBACK_RECORD; +_Function_class_(KBUGCHECK_REASON_CALLBACK_ROUTINE) +_IRQL_requires_same_ typedef VOID (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)( - IN KBUGCHECK_CALLBACK_REASON Reason, - IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, - IN OUT PVOID ReasonSpecificData, - IN ULONG ReasonSpecificDataLength); + _In_ KBUGCHECK_CALLBACK_REASON Reason, + _In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, + _Inout_ PVOID ReasonSpecificData, + _In_ ULONG ReasonSpecificDataLength); typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE; typedef struct _KBUGCHECK_ADD_PAGES { - IN OUT PVOID Context; - IN OUT ULONG Flags; - IN ULONG BugCheckCode; - OUT ULONG_PTR Address; - OUT ULONG_PTR Count; + _Inout_ PVOID Context; + _Inout_ ULONG Flags; + _In_ ULONG BugCheckCode; + _Out_ ULONG_PTR Address; + _Out_ ULONG_PTR Count; } KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES; typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA { - IN PVOID InBuffer; - IN ULONG InBufferLength; - IN ULONG MaximumAllowed; - OUT GUID Guid; - OUT PVOID OutBuffer; - OUT ULONG OutBufferLength; + _In_ PVOID InBuffer; + _In_ ULONG InBufferLength; + _In_ ULONG MaximumAllowed; + _Out_ GUID Guid; + _Out_ PVOID OutBuffer; + _Out_ ULONG OutBufferLength; } KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA; typedef enum _KBUGCHECK_DUMP_IO_TYPE { @@ -862,10 +870,10 @@ typedef enum _KBUGCHECK_DUMP_IO_TYPE { } KBUGCHECK_DUMP_IO_TYPE; typedef struct _KBUGCHECK_DUMP_IO { - IN ULONG64 Offset; - IN PVOID Buffer; - IN ULONG BufferLength; - IN KBUGCHECK_DUMP_IO_TYPE Type; + _In_ ULONG64 Offset; + _In_ PVOID Buffer; + _In_ ULONG BufferLength; + _In_ KBUGCHECK_DUMP_IO_TYPE Type; } KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO; #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL @@ -889,6 +897,8 @@ typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { BufferIncomplete } KBUGCHECK_BUFFER_DUMP_STATE; +_Function_class_(KBUGCHECK_CALLBACK_ROUTINE) +_IRQL_requires_same_ typedef VOID (NTAPI KBUGCHECK_CALLBACK_ROUTINE)( IN PVOID Buffer, @@ -898,17 +908,19 @@ typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE; typedef struct _KBUGCHECK_CALLBACK_RECORD { LIST_ENTRY Entry; PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; - PVOID Buffer; + _Field_size_bytes_opt_(Length) PVOID Buffer; ULONG Length; PUCHAR Component; ULONG_PTR Checksum; UCHAR State; } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; +_Function_class_(NMI_CALLBACK) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI NMI_CALLBACK)( - IN PVOID Context, - IN BOOLEAN Handled); + _In_opt_ PVOID Context, + _In_ BOOLEAN Handled); typedef NMI_CALLBACK *PNMI_CALLBACK; typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE { @@ -926,11 +938,13 @@ typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT { #endif } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT; +_IRQL_requires_same_ +_Function_class_(PROCESSOR_CALLBACK_FUNCTION) typedef VOID (NTAPI PROCESSOR_CALLBACK_FUNCTION)( - IN PVOID CallbackContext, - IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext, - IN OUT PNTSTATUS OperationStatus); + _In_ PVOID CallbackContext, + _In_ PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext, + _Inout_ PNTSTATUS OperationStatus); typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION; #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1 @@ -1032,26 +1046,33 @@ typedef enum _KINTERRUPT_MODE { #define THREAD_WAIT_OBJECTS 3 +_IRQL_requires_same_ +_Function_class_(KSTART_ROUTINE) typedef VOID (NTAPI KSTART_ROUTINE)( - IN PVOID StartContext); + _In_ PVOID StartContext); typedef KSTART_ROUTINE *PKSTART_ROUTINE; typedef VOID (NTAPI *PKINTERRUPT_ROUTINE)( VOID); +_Function_class_(KSERVICE_ROUTINE) +_IRQL_requires_(HIGH_LEVEL) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI KSERVICE_ROUTINE)( - IN struct _KINTERRUPT *Interrupt, - IN PVOID ServiceContext); + _In_ struct _KINTERRUPT *Interrupt, + _In_ PVOID ServiceContext); typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; +_Function_class_(KMESSAGE_SERVICE_ROUTINE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI KMESSAGE_SERVICE_ROUTINE)( - IN struct _KINTERRUPT *Interrupt, - IN PVOID ServiceContext, - IN ULONG MessageID); + _In_ struct _KINTERRUPT *Interrupt, + _In_ PVOID ServiceContext, + _In_ ULONG MessageID); typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE; typedef enum _KD_OPTION { @@ -1136,9 +1157,12 @@ typedef struct _KIPI_COUNTS { ULONG GratuitousDPC; } KIPI_COUNTS, *PKIPI_COUNTS; +_IRQL_requires_same_ +_Function_class_(KIPI_BROADCAST_WORKER) +_IRQL_requires_(IPI_LEVEL) typedef ULONG_PTR (NTAPI KIPI_BROADCAST_WORKER)( - IN ULONG_PTR Argument); + _In_ ULONG_PTR Argument); typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER; typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; @@ -1203,12 +1227,15 @@ typedef enum _KSPIN_LOCK_QUEUE_NUMBER { #endif /* defined(_AMD64_) */ +_Function_class_(KDEFERRED_ROUTINE) +_IRQL_requires_(DISPATCH_LEVEL) +_IRQL_requires_same_ typedef VOID (NTAPI KDEFERRED_ROUTINE)( - IN struct _KDPC *Dpc, - IN PVOID DeferredContext OPTIONAL, - IN PVOID SystemArgument1 OPTIONAL, - IN PVOID SystemArgument2 OPTIONAL); + _In_ struct _KDPC *Dpc, + _In_opt_ PVOID DeferredContext, + _In_opt_ PVOID SystemArgument1, + _In_opt_ PVOID SystemArgument2); typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE; typedef enum _KDPC_IMPORTANCE { @@ -1389,9 +1416,11 @@ typedef enum _LOCK_OPERATION { #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG)) +_Function_class_(KSYNCHRONIZE_ROUTINE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI KSYNCHRONIZE_ROUTINE)( - IN PVOID SynchronizeContext); + _In_ PVOID SynchronizeContext); typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE; typedef enum _POOL_TYPE { @@ -1489,7 +1518,7 @@ typedef struct _XSTATE_CONTEXT { ULONG64 Mask; ULONG Length; ULONG Reserved1; - PXSAVE_AREA Area; + _Field_size_bytes_opt_(Length) PXSAVE_AREA Area; #if defined(_X86_) ULONG Reserved2; #endif @@ -1564,6 +1593,567 @@ extern PCCHAR KeNumberProcessors; #endif + +#if defined(_M_IX86) +/** Kernel definitions for x86 **/ + +/* Interrupt request levels */ +#define PASSIVE_LEVEL 0 +#define LOW_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define CMCI_LEVEL 5 +#define PROFILE_LEVEL 27 +#define CLOCK1_LEVEL 28 +#define CLOCK2_LEVEL 28 +#define IPI_LEVEL 29 +#define POWER_LEVEL 30 +#define HIGH_LEVEL 31 +#define CLOCK_LEVEL CLOCK2_LEVEL + +#define KIP0PCRADDRESS 0xffdff000 +#define KI_USER_SHARED_DATA 0xffdf0000 +#define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) + +#define PAGE_SIZE 0x1000 +#define PAGE_SHIFT 12L +#define KeGetDcacheFillSize() 1L + +#define EFLAG_SIGN 0x8000 +#define EFLAG_ZERO 0x4000 +#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) + +#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) +#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) +#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) + + +typedef struct _KFLOATING_SAVE { + ULONG ControlWord; + ULONG StatusWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + ULONG Cr0NpxState; + ULONG Spare1; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; + +#define YieldProcessor _mm_pause + +FORCEINLINE +VOID +KeMemoryBarrier(VOID) +{ + LONG Barrier, *Dummy = &Barrier; + UNREFERENCED_LOCAL_VARIABLE(Dummy); + +#if defined(__GNUC__) + __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); +#elif defined(_MSC_VER) + __asm xchg [Barrier], eax +#endif +} + +#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() + +_IRQL_requires_max_(HIGH_LEVEL) +_IRQL_saves_ +NTHALAPI +KIRQL +NTAPI +KeGetCurrentIrql(VOID); + +_IRQL_requires_max_(HIGH_LEVEL) +NTHALAPI +VOID +FASTCALL +KfLowerIrql( + _In_ _IRQL_restores_ _Notliteral_ KIRQL NewIrql); +#define KeLowerIrql(a) KfLowerIrql(a) + +_IRQL_requires_max_(HIGH_LEVEL) +_IRQL_raises_(NewIrql) +_IRQL_saves_ +NTHALAPI +KIRQL +FASTCALL +KfRaiseIrql( + _In_ KIRQL NewIrql); +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_ +_IRQL_raises_(DISPATCH_LEVEL) +NTHALAPI +KIRQL +NTAPI +KeRaiseIrqlToDpcLevel(VOID); + +NTHALAPI +KIRQL +NTAPI +KeRaiseIrqlToSynchLevel(VOID); + +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_ +_IRQL_raises_(DISPATCH_LEVEL) +NTHALAPI +KIRQL +FASTCALL +KfAcquireSpinLock( + _Inout_ PKSPIN_LOCK SpinLock); +#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) + +_Requires_lock_held_(*SpinLock) +_Releases_lock_(*SpinLock) +_IRQL_requires_(DISPATCH_LEVEL) +NTHALAPI +VOID +FASTCALL +KfReleaseSpinLock( + _Inout_ PKSPIN_LOCK SpinLock, + _In_ _IRQL_restores_ KIRQL NewIrql); +#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) + +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_requires_min_(DISPATCH_LEVEL) +NTKERNELAPI +VOID +FASTCALL +KefAcquireSpinLockAtDpcLevel( + _Inout_ PKSPIN_LOCK SpinLock); +#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) + +_Requires_lock_held_(*SpinLock) +_Releases_lock_(*SpinLock) +_IRQL_requires_min_(DISPATCH_LEVEL) +NTKERNELAPI +VOID +FASTCALL +KefReleaseSpinLockFromDpcLevel( + _Inout_ PKSPIN_LOCK SpinLock); +#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) + +NTSYSAPI +PKTHREAD +NTAPI +KeGetCurrentThread(VOID); + +_Always_(_Post_satisfies_(return<=0)) +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_Kernel_float_saved_ +_At_(*FloatSave, _Kernel_requires_resource_not_held_(FloatState) _Kernel_acquires_resource_(FloatState)) +NTKERNELAPI +NTSTATUS +NTAPI +KeSaveFloatingPointState( + _Out_ PKFLOATING_SAVE FloatSave); + +_Success_(1) +_Kernel_float_restored_ +_At_(*FloatSave, _Kernel_requires_resource_held_(FloatState) _Kernel_releases_resource_(FloatState)) +NTKERNELAPI +NTSTATUS +NTAPI +KeRestoreFloatingPointState( + _In_ PKFLOATING_SAVE FloatSave); + +/* VOID + * KeFlushIoBuffers( + * IN PMDL Mdl, + * IN BOOLEAN ReadOperation, + * IN BOOLEAN DmaOperation) + */ +#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) + +/* x86 and x64 performs a 0x2C interrupt */ +#define DbgRaiseAssertionFailure __int2c + +FORCEINLINE +VOID +_KeQueryTickCount( + OUT PLARGE_INTEGER CurrentCount) +{ + for (;;) { +#ifdef NONAMELESSUNION + CurrentCount->s.HighPart = KeTickCount.High1Time; + CurrentCount->s.LowPart = KeTickCount.LowPart; + if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; +#else + CurrentCount->HighPart = KeTickCount.High1Time; + CurrentCount->LowPart = KeTickCount.LowPart; + if (CurrentCount->HighPart == KeTickCount.High2Time) break; +#endif + YieldProcessor(); + } +} +#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) + + + + + +#elif defined(_M_AMD64) +/** Kernel definitions for AMD64 **/ + +/* Interrupt request levels */ +#define PASSIVE_LEVEL 0 +#define LOW_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define CMCI_LEVEL 5 +#define CLOCK_LEVEL 13 +#define IPI_LEVEL 14 +#define DRS_LEVEL 14 +#define POWER_LEVEL 14 +#define PROFILE_LEVEL 15 +#define HIGH_LEVEL 15 + +#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL +#define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) +#define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8) +#define SharedSystemTime (KI_USER_SHARED_DATA + 0x14) +#define SharedTickCount (KI_USER_SHARED_DATA + 0x320) + +#define PAGE_SIZE 0x1000 +#define PAGE_SHIFT 12L + +#define EFLAG_SIGN 0x8000 +#define EFLAG_ZERO 0x4000 +#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) + +typedef struct _KFLOATING_SAVE { + ULONG Dummy; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; + +#define KeQueryInterruptTime() \ + (*(volatile ULONG64*)SharedInterruptTime) + +#define KeQuerySystemTime(CurrentCount) \ + *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime + +#define KeQueryTickCount(CurrentCount) \ + *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount + +#define KeGetDcacheFillSize() 1L + +#define YieldProcessor _mm_pause +#define FastFence __faststorefence +#define LoadFence _mm_lfence +#define MemoryFence _mm_mfence +#define StoreFence _mm_sfence +#define LFENCE_ACQUIRE() LoadFence() + +FORCEINLINE +VOID +KeMemoryBarrier(VOID) +{ + // FIXME: Do we really need lfence after the __faststorefence ? + FastFence(); + LFENCE_ACQUIRE(); +} + +#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() + +FORCEINLINE +KIRQL +KeGetCurrentIrql(VOID) +{ + return (KIRQL)__readcr8(); +} + +FORCEINLINE +VOID +KeLowerIrql(IN KIRQL NewIrql) +{ + //ASSERT(KeGetCurrentIrql() >= NewIrql); + __writecr8(NewIrql); +} + +FORCEINLINE +KIRQL +KfRaiseIrql(IN KIRQL NewIrql) +{ + KIRQL OldIrql; + + OldIrql = (KIRQL)__readcr8(); + //ASSERT(OldIrql <= NewIrql); + __writecr8(NewIrql); + return OldIrql; +} +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +FORCEINLINE +KIRQL +KeRaiseIrqlToDpcLevel(VOID) +{ + return KfRaiseIrql(DISPATCH_LEVEL); +} + +FORCEINLINE +KIRQL +KeRaiseIrqlToSynchLevel(VOID) +{ + return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 +} + +FORCEINLINE +PKTHREAD +KeGetCurrentThread(VOID) +{ + return (struct _KTHREAD *)__readgsqword(0x188); +} + +FORCEINLINE +NTSTATUS +KeSaveFloatingPointState(PVOID FloatingState) +{ + UNREFERENCED_PARAMETER(FloatingState); + return STATUS_SUCCESS; +} + +FORCEINLINE +NTSTATUS +KeRestoreFloatingPointState(PVOID FloatingState) +{ + UNREFERENCED_PARAMETER(FloatingState); + return STATUS_SUCCESS; +} + +/* VOID + * KeFlushIoBuffers( + * IN PMDL Mdl, + * IN BOOLEAN ReadOperation, + * IN BOOLEAN DmaOperation) + */ +#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) + +/* x86 and x64 performs a 0x2C interrupt */ +#define DbgRaiseAssertionFailure __int2c + +#elif defined(_M_IA64) +/** Kernel definitions for IA64 **/ + +/* Interrupt request levels */ +#define PASSIVE_LEVEL 0 +#define LOW_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define CMC_LEVEL 3 +#define DEVICE_LEVEL_BASE 4 +#define PC_LEVEL 12 +#define IPI_LEVEL 14 +#define DRS_LEVEL 14 +#define CLOCK_LEVEL 13 +#define POWER_LEVEL 15 +#define PROFILE_LEVEL 15 +#define HIGH_LEVEL 15 + +#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) +extern volatile LARGE_INTEGER KeTickCount; + +#define PAUSE_PROCESSOR __yield(); + +FORCEINLINE +VOID +KeFlushWriteBuffer(VOID) +{ + __mf (); + return; +} + +NTSYSAPI +PKTHREAD +NTAPI +KeGetCurrentThread(VOID); + + +#elif defined(_M_PPC) + +/* Interrupt request levels */ +#define PASSIVE_LEVEL 0 +#define LOW_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define PROFILE_LEVEL 27 +#define CLOCK1_LEVEL 28 +#define CLOCK2_LEVEL 28 +#define IPI_LEVEL 29 +#define POWER_LEVEL 30 +#define HIGH_LEVEL 31 + +// +// Used to contain PFNs and PFN counts +// +typedef ULONG PFN_COUNT; +typedef ULONG PFN_NUMBER, *PPFN_NUMBER; +typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; + + +typedef struct _KFLOATING_SAVE { + ULONG Dummy; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +typedef struct _KPCR_TIB { + PVOID ExceptionList; /* 00 */ + PVOID StackBase; /* 04 */ + PVOID StackLimit; /* 08 */ + PVOID SubSystemTib; /* 0C */ + _ANONYMOUS_UNION union { + PVOID FiberData; /* 10 */ + ULONG Version; /* 10 */ + } DUMMYUNIONNAME; + PVOID ArbitraryUserPointer; /* 14 */ + struct _KPCR_TIB *Self; /* 18 */ +} KPCR_TIB, *PKPCR_TIB; /* 1C */ + +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 + +typedef struct _KPCR { + KPCR_TIB Tib; /* 00 */ + struct _KPCR *Self; /* 1C */ + struct _KPRCB *Prcb; /* 20 */ + KIRQL Irql; /* 24 */ + ULONG IRR; /* 28 */ + ULONG IrrActive; /* 2C */ + ULONG IDR; /* 30 */ + PVOID KdVersionBlock; /* 34 */ + PUSHORT IDT; /* 38 */ + PUSHORT GDT; /* 3C */ + struct _KTSS *TSS; /* 40 */ + USHORT MajorVersion; /* 44 */ + USHORT MinorVersion; /* 46 */ + KAFFINITY SetMember; /* 48 */ + ULONG StallScaleFactor; /* 4C */ + UCHAR SpareUnused; /* 50 */ + UCHAR Number; /* 51 */ +} KPCR, *PKPCR; /* 54 */ + +#define KeGetPcr() PCR + +#define YieldProcessor() __asm__ __volatile__("nop"); + +FORCEINLINE +ULONG +NTAPI +KeGetCurrentProcessorNumber(VOID) +{ + ULONG Number; + __asm__ __volatile__ ( + "lwz %0, %c1(12)\n" + : "=r" (Number) + : "i" (FIELD_OFFSET(KPCR, Number)) + ); + return Number; +} + +NTHALAPI +VOID +FASTCALL +KfLowerIrql( + IN KIRQL NewIrql); +#define KeLowerIrql(a) KfLowerIrql(a) + +NTHALAPI +KIRQL +FASTCALL +KfRaiseIrql( + IN KIRQL NewIrql); +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +NTHALAPI +KIRQL +NTAPI +KeRaiseIrqlToDpcLevel(VOID); + +NTHALAPI +KIRQL +NTAPI +KeRaiseIrqlToSynchLevel(VOID); + + + +#elif defined(_M_MIPS) +#error MIPS Headers are totally incorrect + +// +// Used to contain PFNs and PFN counts +// +typedef ULONG PFN_COUNT; +typedef ULONG PFN_NUMBER, *PPFN_NUMBER; +typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; + +#define PASSIVE_LEVEL 0 +#define APC_LEVEL 1 +#define DISPATCH_LEVEL 2 +#define PROFILE_LEVEL 27 +#define IPI_LEVEL 29 +#define HIGH_LEVEL 31 + +typedef struct _KPCR { + struct _KPRCB *Prcb; /* 20 */ + KIRQL Irql; /* 24 */ + ULONG IRR; /* 28 */ + ULONG IDR; /* 30 */ +} KPCR, *PKPCR; + +#define KeGetPcr() PCR + +typedef struct _KFLOATING_SAVE { +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +static __inline +ULONG +NTAPI +KeGetCurrentProcessorNumber(VOID) +{ + return 0; +} + +#define YieldProcessor() __asm__ __volatile__("nop"); + +#define KeLowerIrql(a) KfLowerIrql(a) +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +NTKERNELAPI +VOID +NTAPI +KfLowerIrql( + IN KIRQL NewIrql); + +NTKERNELAPI +KIRQL +NTAPI +KfRaiseIrql( + IN KIRQL NewIrql); + +NTKERNELAPI +KIRQL +NTAPI +KeRaiseIrqlToDpcLevel(VOID); + +NTKERNELAPI +KIRQL +NTAPI +KeRaiseIrqlToSynchLevel(VOID); + + +#elif defined(_M_ARM) +#include +#else +#error Unknown Architecture +#endif + /****************************************************************************** * Memory manager Types * ******************************************************************************/ @@ -1668,6 +2258,8 @@ typedef ULONG PFN_COUNT; typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER; typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER; +_Struct_size_bytes_(_Inexpressible_(sizeof(struct _MDL) + + (ByteOffset + ByteCount + PAGE_SIZE-1) / PAGE_SIZE * sizeof(PFN_NUMBER))) typedef struct _MDL { struct _MDL *Next; CSHORT Size; @@ -1678,7 +2270,11 @@ typedef struct _MDL { ULONG ByteCount; ULONG ByteOffset; } MDL, *PMDL; +#if (_MSC_VER >= 1600) +typedef _Readable_bytes_(_Inexpressible_(polymorphism)) MDL *PMDLX; +#else typedef MDL *PMDLX; +#endif typedef enum _MEMORY_CACHING_TYPE_ORIG { MmFrameBufferCached = 2 @@ -1765,33 +2361,43 @@ typedef enum _EX_POOL_PRIORITY { typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX; +_IRQL_requires_same_ +_Function_class_(ALLOCATE_FUNCTION) typedef PVOID (NTAPI *PALLOCATE_FUNCTION)( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); + _In_ POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes, + _In_ ULONG Tag); +_IRQL_requires_same_ +_Function_class_(ALLOCATE_FUNCTION_EX) typedef PVOID (NTAPI *PALLOCATE_FUNCTION_EX)( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag, - IN OUT PLOOKASIDE_LIST_EX Lookaside); + _In_ POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes, + _In_ ULONG Tag, + _Inout_ PLOOKASIDE_LIST_EX Lookaside); +_IRQL_requires_same_ +_Function_class_(FREE_FUNCTION) typedef VOID (NTAPI *PFREE_FUNCTION)( - IN PVOID Buffer); + _In_ PVOID Buffer); +_IRQL_requires_same_ +_Function_class_(FREE_FUNCTION_EX) typedef VOID (NTAPI *PFREE_FUNCTION_EX)( - IN PVOID Buffer, - IN OUT PLOOKASIDE_LIST_EX Lookaside); + _In_ PVOID Buffer, + _Inout_ PLOOKASIDE_LIST_EX Lookaside); +_IRQL_requires_same_ +_Function_class_(CALLBACK_FUNCTION) typedef VOID (NTAPI CALLBACK_FUNCTION)( - IN PVOID CallbackContext OPTIONAL, - IN PVOID Argument1 OPTIONAL, - IN PVOID Argument2 OPTIONAL); + _In_opt_ PVOID CallbackContext, + _In_opt_ PVOID Argument1, + _In_opt_ PVOID Argument2); typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION; #define GENERAL_LOOKASIDE_LAYOUT \ @@ -1845,7 +2451,7 @@ LOOKASIDE_CHECK(TotalFrees); LOOKASIDE_CHECK(Tag); LOOKASIDE_CHECK(Future); -typedef struct _PAGED_LOOKASIDE_LIST { +typedef struct LOOKASIDE_ALIGN _PAGED_LOOKASIDE_LIST { GENERAL_LOOKASIDE L; #if !defined(_AMD64_) && !defined(_IA64_) FAST_MUTEX Lock__ObsoleteButDoNotDelete; @@ -1891,9 +2497,11 @@ typedef enum _WORK_QUEUE_TYPE { MaximumWorkQueue } WORK_QUEUE_TYPE; +_IRQL_requires_same_ +_Function_class_(WORKER_THREAD_ROUTINE) typedef VOID (NTAPI WORKER_THREAD_ROUTINE)( - IN PVOID Parameter); + _In_ PVOID Parameter); typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE; typedef struct _WORK_QUEUE_ITEM { @@ -2187,8 +2795,8 @@ typedef struct _ACCESS_STATE { typedef VOID (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)( - IN PVOID Vcb, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ PVOID Vcb, + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); #ifndef _NTLSA_IFS_ @@ -2671,22 +3279,25 @@ DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1 +_Function_class_(REQUEST_POWER_COMPLETE) +_IRQL_requires_same_ typedef VOID (NTAPI REQUEST_POWER_COMPLETE)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN UCHAR MinorFunction, - IN POWER_STATE PowerState, - IN PVOID Context, - IN struct _IO_STATUS_BLOCK *IoStatus); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ UCHAR MinorFunction, + _In_ POWER_STATE PowerState, + _In_opt_ PVOID Context, + _In_ struct _IO_STATUS_BLOCK *IoStatus); typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE; -typedef -NTSTATUS +_Function_class_(POWER_SETTING_CALLBACK) +_IRQL_requires_same_ +typedef NTSTATUS (NTAPI POWER_SETTING_CALLBACK)( - IN LPCGUID SettingGuid, - IN PVOID Value, - IN ULONG ValueLength, - IN OUT PVOID Context OPTIONAL); + _In_ LPCGUID SettingGuid, + _In_reads_bytes_(ValueLength) PVOID Value, + _In_ ULONG ValueLength, + _Inout_opt_ PVOID Context); typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK; /****************************************************************************** @@ -3276,13 +3887,13 @@ typedef struct _KEY_VALUE_PARTIAL_INFORMATION { ULONG TitleIndex; ULONG Type; ULONG DataLength; - UCHAR Data[1]; + _Field_size_bytes_(DataLength) UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { ULONG Type; ULONG DataLength; - UCHAR Data[1]; + _Field_size_bytes_(DataLength) UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; typedef struct _KEY_VALUE_ENTRY { @@ -3370,11 +3981,13 @@ typedef enum _REG_NOTIFY_CLASS { MaxRegNtNotifyClass } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS; +_IRQL_requires_same_ +_Function_class_(EX_CALLBACK_FUNCTION) typedef NTSTATUS (NTAPI EX_CALLBACK_FUNCTION)( - IN PVOID CallbackContext, - IN PVOID Argument1, - IN PVOID Argument2); + _In_ PVOID CallbackContext, + _In_opt_ PVOID Argument1, + _In_opt_ PVOID Argument2); typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION; typedef struct _REG_DELETE_KEY_INFORMATION { @@ -3871,12 +4484,14 @@ typedef enum _IO_ALLOCATION_ACTION { DeallocateObjectKeepRegisters } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; +_Function_class_(DRIVER_CONTROL) +_IRQL_requires_same_ typedef IO_ALLOCATION_ACTION (NTAPI DRIVER_CONTROL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID MapRegisterBase, - IN PVOID Context); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ struct _IRP *Irp, + _In_ PVOID MapRegisterBase, + _In_ PVOID Context); typedef DRIVER_CONTROL *PDRIVER_CONTROL; typedef struct _WAIT_CONTEXT_BLOCK { @@ -3930,7 +4545,7 @@ typedef struct _WAIT_CONTEXT_BLOCK { /* DEVICE_OBJECT.DeviceType */ #define DEVICE_TYPE ULONG -typedef struct _DEVICE_OBJECT { +typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size; LONG ReferenceCount; @@ -3996,48 +4611,48 @@ typedef struct _IO_INTERRUPT_MESSAGE_INFO { } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO; typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - OUT PKINTERRUPT *InterruptObject; - IN PKSERVICE_ROUTINE ServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql; - IN BOOLEAN FloatingSave; - IN BOOLEAN ShareVector; - IN ULONG Vector; - IN KIRQL Irql; - IN KINTERRUPT_MODE InterruptMode; - IN KAFFINITY ProcessorEnableMask; - IN USHORT Group; + _In_ PDEVICE_OBJECT PhysicalDeviceObject; + _Out_ PKINTERRUPT *InterruptObject; + _In_ PKSERVICE_ROUTINE ServiceRoutine; + _In_ PVOID ServiceContext; + _In_opt_ PKSPIN_LOCK SpinLock; + _In_ KIRQL SynchronizeIrql; + _In_ BOOLEAN FloatingSave; + _In_ BOOLEAN ShareVector; + _In_ ULONG Vector; + _In_ KIRQL Irql; + _In_ KINTERRUPT_MODE InterruptMode; + _In_ KAFFINITY ProcessorEnableMask; + _In_ USHORT Group; } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS; typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; - OUT PKINTERRUPT *InterruptObject; - IN PKSERVICE_ROUTINE ServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql OPTIONAL; - IN BOOLEAN FloatingSave; + _In_ PDEVICE_OBJECT PhysicalDeviceObject; + _Out_ PKINTERRUPT *InterruptObject; + _In_ PKSERVICE_ROUTINE ServiceRoutine; + _In_ PVOID ServiceContext; + _In_opt_ PKSPIN_LOCK SpinLock; + _In_opt_ KIRQL SynchronizeIrql; + _In_ BOOLEAN FloatingSave; } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS; typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS { - IN PDEVICE_OBJECT PhysicalDeviceObject; + _In_ PDEVICE_OBJECT PhysicalDeviceObject; union { - OUT PVOID *Generic; - OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; - OUT PKINTERRUPT *InterruptObject; + _Out_ PVOID *Generic; + _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; + _Out_ PKINTERRUPT *InterruptObject; } ConnectionContext; - IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; - IN PVOID ServiceContext; - IN PKSPIN_LOCK SpinLock OPTIONAL; - IN KIRQL SynchronizeIrql OPTIONAL; - IN BOOLEAN FloatingSave; - IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL; + _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; + _In_ PVOID ServiceContext; + _In_opt_ PKSPIN_LOCK SpinLock; + _In_opt_ KIRQL SynchronizeIrql; + _In_ BOOLEAN FloatingSave; + _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine; } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS; typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { - IN OUT ULONG Version; + _Inout_ ULONG Version; _ANONYMOUS_UNION union { IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified; IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased; @@ -4046,11 +4661,11 @@ typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS; typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS { - IN ULONG Version; + _In_ ULONG Version; union { - IN PVOID Generic; - IN PKINTERRUPT InterruptObject; - IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; + _In_ PVOID Generic; + _In_ PKINTERRUPT InterruptObject; + _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; } ConnectionContext; } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS; @@ -4097,12 +4712,12 @@ typedef NTSTATUS typedef NTSTATUS (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( - IN PVOID SessionObject, - IN PVOID IoObject, - IN ULONG Event, - IN PVOID Context, - IN PVOID NotificationPayload, - IN ULONG PayloadLength); + _In_ PVOID SessionObject, + _In_ PVOID IoObject, + _In_ ULONG Event, + _In_ PVOID Context, + _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload, + _In_ ULONG PayloadLength); typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION; @@ -4139,17 +4754,20 @@ typedef struct _IO_REMOVE_LOCK { typedef struct _IO_WORKITEM *PIO_WORKITEM; +_Function_class_(IO_WORKITEM_ROUTINE) +_IRQL_requires_(PASSIVE_LEVEL) +_IRQL_requires_same_ typedef VOID (NTAPI IO_WORKITEM_ROUTINE)( - IN PDEVICE_OBJECT DeviceObject, - IN PVOID Context); + _In_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PVOID Context); typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; typedef VOID (NTAPI IO_WORKITEM_ROUTINE_EX)( - IN PVOID IoObject, - IN PVOID Context OPTIONAL, - IN PIO_WORKITEM IoWorkItem); + _In_ PVOID IoObject, + _In_opt_ PVOID Context, + _In_ PIO_WORKITEM IoWorkItem); typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX; typedef struct _SHARE_ACCESS { @@ -4265,9 +4883,9 @@ typedef struct _IO_STATUS_BLOCK32 { typedef VOID (NTAPI *PIO_APC_ROUTINE)( - IN PVOID ApcContext, - IN PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG Reserved); + _In_ PVOID ApcContext, + _In_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG Reserved); #define PIO_APC_ROUTINE_DEFINED @@ -4497,29 +5115,35 @@ typedef VOID (NTAPI *PINTERFACE_DEREFERENCE)( PVOID Context); +_Function_class_(TRANSLATE_BUS_ADDRESS) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI TRANSLATE_BUS_ADDRESS)( - IN PVOID Context, - IN PHYSICAL_ADDRESS BusAddress, - IN ULONG Length, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress); + _Inout_opt_ PVOID Context, + _In_ PHYSICAL_ADDRESS BusAddress, + _In_ ULONG Length, + _Out_ PULONG AddressSpace, + _Out_ PPHYSICAL_ADDRESS TranslatedAddress); typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS; +_Function_class_(GET_DMA_ADAPTER) +_IRQL_requires_same_ typedef struct _DMA_ADAPTER* (NTAPI GET_DMA_ADAPTER)( - IN PVOID Context, - IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, - OUT PULONG NumberOfMapRegisters); + _Inout_opt_ PVOID Context, + _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, + _Out_ PULONG NumberOfMapRegisters); typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER; +_Function_class_(GET_SET_DEVICE_DATA) +_IRQL_requires_same_ typedef ULONG (NTAPI GET_SET_DEVICE_DATA)( - IN PVOID Context, - IN ULONG DataType, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _Inout_opt_ PVOID Context, + _In_ ULONG DataType, + _Inout_updates_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA; typedef enum _DEVICE_INSTALL_STATE { @@ -4542,8 +5166,8 @@ typedef enum _DEVICE_REMOVAL_POLICY { } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY; typedef VOID -(NTAPI*PREENUMERATE_SELF)( - IN PVOID Context); +(NTAPI *PREENUMERATE_SELF)( + _In_ PVOID Context); typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { USHORT Size; @@ -4556,8 +5180,8 @@ typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { typedef VOID (NTAPI *PIO_DEVICE_EJECT_CALLBACK)( - IN NTSTATUS Status, - IN OUT PVOID Context OPTIONAL); + _In_ NTSTATUS Status, + _Inout_opt_ PVOID Context); #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1 @@ -4583,20 +5207,24 @@ typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { UCHAR ProgIf; } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ typedef BOOLEAN (NTAPI PCI_IS_DEVICE_PRESENT)( - IN USHORT VendorID, - IN USHORT DeviceID, - IN UCHAR RevisionID, - IN USHORT SubVendorID, - IN USHORT SubSystemID, - IN ULONG Flags); + _In_ USHORT VendorID, + _In_ USHORT DeviceID, + _In_ UCHAR RevisionID, + _In_ USHORT SubVendorID, + _In_ USHORT SubSystemID, + _In_ ULONG Flags); typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT; +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ typedef BOOLEAN (NTAPI PCI_IS_DEVICE_PRESENT_EX)( - IN PVOID Context, - IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); + _In_ PVOID Context, + _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX; typedef struct _BUS_INTERFACE_STANDARD { @@ -4621,8 +5249,9 @@ typedef struct _PCI_DEVICE_PRESENT_INTERFACE { PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; +_Struct_size_bytes_(Size) typedef struct _DEVICE_CAPABILITIES { - USHORT Size; + _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size; USHORT Version; ULONG DeviceD1:1; ULONG DeviceD2:1; @@ -4717,13 +5346,14 @@ typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { #define PNP_REPLACE_NO_MAP MAXLONGLONG +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_MAP_MEMORY)( - IN PHYSICAL_ADDRESS TargetPhysicalAddress, - IN PHYSICAL_ADDRESS SparePhysicalAddress, - IN OUT PLARGE_INTEGER NumberOfBytes, - OUT PVOID *TargetAddress, - OUT PVOID *SpareAddress); + _In_ PHYSICAL_ADDRESS TargetPhysicalAddress, + _In_ PHYSICAL_ADDRESS SparePhysicalAddress, + _Inout_ PLARGE_INTEGER NumberOfBytes, + _Outptr_ PVOID *TargetAddress, + _Outptr_ PVOID *SpareAddress); typedef struct _PNP_REPLACE_MEMORY_LIST { ULONG AllocatedCount; @@ -4737,7 +5367,7 @@ typedef struct _PNP_REPLACE_MEMORY_LIST { typedef struct _PNP_REPLACE_PROCESSOR_LIST { PKAFFINITY Affinity; - ULONG GroupCount; + _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount; ULONG AllocatedCount; ULONG Count; ULONG ApicIds[ANYSIZE_ARRAY]; @@ -4768,49 +5398,58 @@ typedef VOID (NTAPI *PREPLACE_UNLOAD)( VOID); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_BEGIN)( - IN PPNP_REPLACE_PARAMETERS Parameters, - OUT PVOID *Context); + _In_ PPNP_REPLACE_PARAMETERS Parameters, + _Outptr_ PVOID *Context); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_END)( - IN PVOID Context); + _In_ PVOID Context); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( - IN PVOID Context, - IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER ByteCount); + _In_ PVOID Context, + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ LARGE_INTEGER ByteCount); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_SET_PROCESSOR_ID)( - IN PVOID Context, - IN ULONG ApicId, - IN BOOLEAN Target); + _In_ PVOID Context, + _In_ ULONG ApicId, + _In_ BOOLEAN Target); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_SWAP)( - IN PVOID Context); + _In_ PVOID Context); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( - IN PVOID Context); + _In_ PVOID Context); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( - IN PVOID Context); + _In_ PVOID Context); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( - IN PVOID Context, - IN PHYSICAL_ADDRESS SourceAddress, - OUT PPHYSICAL_ADDRESS DestinationAddress); + _In_ PVOID Context, + _In_ PHYSICAL_ADDRESS SourceAddress, + _Out_ PPHYSICAL_ADDRESS DestinationAddress); +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( - IN PVOID Context, - IN BOOLEAN Enable); + _In_ PVOID Context, + _In_ BOOLEAN Enable); #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \ @@ -4838,10 +5477,11 @@ typedef struct _PNP_REPLACE_DRIVER_INTERFACE { PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce; } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE; +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREPLACE_DRIVER_INIT)( - IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface, - IN PVOID Unused); + _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface, + _In_ PVOID Unused); typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { DeviceUsageTypeUndefined, @@ -4856,30 +5496,40 @@ typedef struct _POWER_SEQUENCE { ULONG SequenceD3; } POWER_SEQUENCE, *PPOWER_SEQUENCE; +#ifdef _PREFAST_ +#define __string_type 0x1000 +#define __guid_type 0x2000 +#define __multiString_type 0x4000 +#else +#define __string_type 0 +#define __guid_type 0 +#define __multiString_type 0 +#endif + typedef enum { - DevicePropertyDeviceDescription = 0x0, - DevicePropertyHardwareID = 0x1, - DevicePropertyCompatibleIDs = 0x2, + DevicePropertyDeviceDescription = 0x0 | __string_type, + DevicePropertyHardwareID = 0x1 | __multiString_type, + DevicePropertyCompatibleIDs = 0x2 | __multiString_type, DevicePropertyBootConfiguration = 0x3, DevicePropertyBootConfigurationTranslated = 0x4, - DevicePropertyClassName = 0x5, - DevicePropertyClassGuid = 0x6, - DevicePropertyDriverKeyName = 0x7, - DevicePropertyManufacturer = 0x8, - DevicePropertyFriendlyName = 0x9, - DevicePropertyLocationInformation = 0xa, - DevicePropertyPhysicalDeviceObjectName = 0xb, - DevicePropertyBusTypeGuid = 0xc, + DevicePropertyClassName = 0x5 | __string_type, + DevicePropertyClassGuid = 0x6 | __string_type, + DevicePropertyDriverKeyName = 0x7 | __string_type, + DevicePropertyManufacturer = 0x8 | __string_type, + DevicePropertyFriendlyName = 0x9 | __string_type, + DevicePropertyLocationInformation = 0xa | __string_type, + DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type, + DevicePropertyBusTypeGuid = 0xc | __guid_type, DevicePropertyLegacyBusType = 0xd, DevicePropertyBusNumber = 0xe, - DevicePropertyEnumeratorName = 0xf, + DevicePropertyEnumeratorName = 0xf | __string_type, DevicePropertyAddress = 0x10, DevicePropertyUINumber = 0x11, DevicePropertyInstallState = 0x12, DevicePropertyRemovalPolicy = 0x13, DevicePropertyResourceRequirements = 0x14, DevicePropertyAllocatedResources = 0x15, - DevicePropertyContainerID = 0x16 + DevicePropertyContainerID = 0x16 | __string_type } DEVICE_REGISTRY_PROPERTY; typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { @@ -4900,15 +5550,19 @@ typedef enum _IO_PRIORITY_HINT { #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 +_Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE) +_IRQL_requires_max_(PASSIVE_LEVEL) typedef NTSTATUS (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( - IN PVOID NotificationStructure, - IN PVOID Context); + _In_ PVOID NotificationStructure, + _Inout_opt_ PVOID Context); typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE; +_Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK) +_IRQL_requires_same_ typedef VOID (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( - IN PVOID Context); + _Inout_opt_ PVOID Context); typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK; typedef enum _FILE_INFORMATION_CLASS { @@ -5081,251 +5735,305 @@ typedef struct _FILE_SFIO_VOLUME_INFORMATION { #define FM_LOCK_WAITER_WOKEN (0x2) #define FM_LOCK_WAITER_INC (0x4) +_Function_class_(FAST_IO_CHECK_IF_POSSIBLE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_CHECK_IF_POSSIBLE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN BOOLEAN CheckForReadOperation, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_ ULONG LockKey, + _In_ BOOLEAN CheckForReadOperation, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE; +_Function_class_(FAST_IO_READ) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_READ)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_ ULONG LockKey, + _Out_ PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_READ *PFAST_IO_READ; +_Function_class_(FAST_IO_WRITE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - IN ULONG LockKey, - IN PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ BOOLEAN Wait, + _In_ ULONG LockKey, + _In_ PVOID Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_WRITE *PFAST_IO_WRITE; +_Function_class_(FAST_IO_QUERY_BASIC_INFO) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_QUERY_BASIC_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT PFILE_BASIC_INFORMATION Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ BOOLEAN Wait, + _Out_ PFILE_BASIC_INFORMATION Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO; +_Function_class_(FAST_IO_QUERY_STANDARD_INFO) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_QUERY_STANDARD_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT PFILE_STANDARD_INFORMATION Buffer, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ BOOLEAN Wait, + _Out_ PFILE_STANDARD_INFORMATION Buffer, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO; +_Function_class_(FAST_IO_LOCK) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_LOCK)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - PEPROCESS ProcessId, - ULONG Key, - BOOLEAN FailImmediately, - BOOLEAN ExclusiveLock, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ PEPROCESS ProcessId, + _In_ ULONG Key, + _In_ BOOLEAN FailImmediately, + _In_ BOOLEAN ExclusiveLock, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_LOCK *PFAST_IO_LOCK; +_Function_class_(FAST_IO_UNLOCK_SINGLE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_SINGLE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PLARGE_INTEGER Length, - PEPROCESS ProcessId, - ULONG Key, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PLARGE_INTEGER Length, + _In_ PEPROCESS ProcessId, + _In_ ULONG Key, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE; +_Function_class_(FAST_IO_UNLOCK_ALL) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_ALL)( - IN struct _FILE_OBJECT *FileObject, - PEPROCESS ProcessId, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PEPROCESS ProcessId, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL; +_Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( - IN struct _FILE_OBJECT *FileObject, - PVOID ProcessId, - ULONG Key, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PVOID ProcessId, + _In_ ULONG Key, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY; +_Function_class_(FAST_IO_DEVICE_CONTROL) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_DEVICE_CONTROL)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength, - IN ULONG IoControlCode, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ BOOLEAN Wait, + _In_opt_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_opt_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength, + _In_ ULONG IoControlCode, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL; +_Function_class_(FAST_IO_ACQUIRE_FILE) +_IRQL_requires_same_ typedef VOID (NTAPI FAST_IO_ACQUIRE_FILE)( - IN struct _FILE_OBJECT *FileObject); + _In_ struct _FILE_OBJECT *FileObject); typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE; +_Function_class_(FAST_IO_RELEASE_FILE) +_IRQL_requires_same_ typedef VOID (NTAPI FAST_IO_RELEASE_FILE)( - IN struct _FILE_OBJECT *FileObject); + _In_ struct _FILE_OBJECT *FileObject); typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE; +_Function_class_(FAST_IO_DETACH_DEVICE) +_IRQL_requires_same_ typedef VOID (NTAPI FAST_IO_DETACH_DEVICE)( - IN struct _DEVICE_OBJECT *SourceDevice, - IN struct _DEVICE_OBJECT *TargetDevice); + _In_ struct _DEVICE_OBJECT *SourceDevice, + _In_ struct _DEVICE_OBJECT *TargetDevice); typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE; +_Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( - IN struct _FILE_OBJECT *FileObject, - IN BOOLEAN Wait, - OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, - OUT struct _IO_STATUS_BLOCK *IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ BOOLEAN Wait, + _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, + _Out_ struct _IO_STATUS_BLOCK *IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO; +_Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER EndingOffset, - OUT struct _ERESOURCE **ResourceToRelease, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER EndingOffset, + _Out_ struct _ERESOURCE **ResourceToRelease, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE; +_Function_class_(FAST_IO_MDL_READ) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_MDL_READ)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ; +_Function_class_(FAST_IO_MDL_READ_COMPLETE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_MDL_READ_COMPLETE)( - IN struct _FILE_OBJECT *FileObject, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PMDL MdlChain, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE; +_Function_class_(FAST_IO_PREPARE_MDL_WRITE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_PREPARE_MDL_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE; +_Function_class_(FAST_IO_MDL_WRITE_COMPLETE) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_MDL_WRITE_COMPLETE)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PMDL MdlChain, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE; +_Function_class_(FAST_IO_READ_COMPRESSED) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_READ_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - OUT PVOID Buffer, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, - IN ULONG CompressedDataInfoLength, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _Out_ PVOID Buffer, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + _In_ ULONG CompressedDataInfoLength, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED; +_Function_class_(FAST_IO_WRITE_COMPRESSED) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_WRITE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN ULONG LockKey, - IN PVOID Buffer, - OUT PMDL *MdlChain, - OUT PIO_STATUS_BLOCK IoStatus, - IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, - IN ULONG CompressedDataInfoLength, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ ULONG Length, + _In_ ULONG LockKey, + _In_ PVOID Buffer, + _Out_ PMDL *MdlChain, + _Out_ PIO_STATUS_BLOCK IoStatus, + _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + _In_ ULONG CompressedDataInfoLength, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED; +_Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PMDL MdlChain, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED; +_Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( - IN struct _FILE_OBJECT *FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ PLARGE_INTEGER FileOffset, + _In_ PMDL MdlChain, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED; +_Function_class_(FAST_IO_QUERY_OPEN) +_IRQL_requires_same_ typedef BOOLEAN (NTAPI FAST_IO_QUERY_OPEN)( - IN struct _IRP *Irp, - OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, - IN struct _DEVICE_OBJECT *DeviceObject); + _Inout_ struct _IRP *Irp, + _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN; +_Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( - IN struct _FILE_OBJECT *FileObject, - IN struct _ERESOURCE *ResourceToRelease, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ struct _ERESOURCE *ResourceToRelease, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE; +_Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( - IN struct _FILE_OBJECT *FileObject, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH; +_Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( - IN struct _FILE_OBJECT *FileObject, - IN struct _DEVICE_OBJECT *DeviceObject); + _In_ struct _FILE_OBJECT *FileObject, + _In_ struct _DEVICE_OBJECT *DeviceObject); typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH; typedef struct _FAST_IO_DISPATCH { @@ -5731,10 +6439,14 @@ typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ +_Function_class_(DRIVER_ADD_DEVICE) +_IRQL_requires_(PASSIVE_LEVEL) +_IRQL_requires_same_ +_When_(return>=0, _Kernel_clear_do_init_(__yes)) typedef NTSTATUS (NTAPI DRIVER_ADD_DEVICE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN struct _DEVICE_OBJECT *PhysicalDeviceObject); + _In_ struct _DRIVER_OBJECT *DriverObject, + _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject); typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; typedef struct _DRIVER_EXTENSION { @@ -5748,27 +6460,39 @@ typedef struct _DRIVER_EXTENSION { #define DRVO_LEGACY_DRIVER 0x00000002 #define DRVO_BUILTIN_DRIVER 0x00000004 +_Function_class_(DRIVER_INITIALIZE) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI DRIVER_INITIALIZE)( - IN struct _DRIVER_OBJECT *DriverObject, - IN PUNICODE_STRING RegistryPath); + _In_ struct _DRIVER_OBJECT *DriverObject, + _In_ PUNICODE_STRING RegistryPath); typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; +_Function_class_(DRIVER_STARTIO) +_IRQL_always_function_min_(DISPATCH_LEVEL) +_IRQL_requires_(DISPATCH_LEVEL) +_IRQL_requires_same_ typedef VOID (NTAPI DRIVER_STARTIO)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); + _Inout_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ struct _IRP *Irp); typedef DRIVER_STARTIO *PDRIVER_STARTIO; +_Function_class_(DRIVER_UNLOAD) +_IRQL_requires_(PASSIVE_LEVEL) +_IRQL_requires_same_ typedef VOID (NTAPI DRIVER_UNLOAD)( - IN struct _DRIVER_OBJECT *DriverObject); + _In_ struct _DRIVER_OBJECT *DriverObject); typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; +_Function_class_(DRIVER_DISPATCH) +_IRQL_requires_(PASSIVE_LEVEL) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI DRIVER_DISPATCH)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ struct _IRP *Irp); typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; typedef struct _DRIVER_OBJECT { @@ -5797,120 +6521,122 @@ typedef struct _DMA_ADAPTER { typedef VOID (NTAPI *PPUT_DMA_ADAPTER)( - IN PDMA_ADAPTER DmaAdapter); + PDMA_ADAPTER DmaAdapter); typedef PVOID (NTAPI *PALLOCATE_COMMON_BUFFER)( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ ULONG Length, + _Out_ PPHYSICAL_ADDRESS LogicalAddress, + _In_ BOOLEAN CacheEnabled); typedef VOID (NTAPI *PFREE_COMMON_BUFFER)( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ ULONG Length, + _In_ PHYSICAL_ADDRESS LogicalAddress, + _In_ PVOID VirtualAddress, + _In_ BOOLEAN CacheEnabled); typedef NTSTATUS (NTAPI *PALLOCATE_ADAPTER_CHANNEL)( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG NumberOfMapRegisters, + _In_ PDRIVER_CONTROL ExecutionRoutine, + _In_ PVOID Context); typedef BOOLEAN (NTAPI *PFLUSH_ADAPTER_BUFFERS)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN ULONG Length, - IN BOOLEAN WriteToDevice); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ BOOLEAN WriteToDevice); typedef VOID (NTAPI *PFREE_ADAPTER_CHANNEL)( - IN PDMA_ADAPTER DmaAdapter); + _In_ PDMA_ADAPTER DmaAdapter); typedef VOID (NTAPI *PFREE_MAP_REGISTERS)( - IN PDMA_ADAPTER DmaAdapter, + _In_ PDMA_ADAPTER DmaAdapter, PVOID MapRegisterBase, ULONG NumberOfMapRegisters); typedef PHYSICAL_ADDRESS (NTAPI *PMAP_TRANSFER)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _Inout_ PULONG Length, + _In_ BOOLEAN WriteToDevice); typedef ULONG (NTAPI *PGET_DMA_ALIGNMENT)( - IN PDMA_ADAPTER DmaAdapter); + _In_ PDMA_ADAPTER DmaAdapter); typedef ULONG (NTAPI *PREAD_DMA_COUNTER)( - IN PDMA_ADAPTER DmaAdapter); + _In_ PDMA_ADAPTER DmaAdapter); +_Function_class_(DRIVER_LIST_CONTROL) +_IRQL_requires_same_ typedef VOID (NTAPI DRIVER_LIST_CONTROL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN struct _SCATTER_GATHER_LIST *ScatterGather, - IN PVOID Context); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ struct _IRP *Irp, + _In_ struct _SCATTER_GATHER_LIST *ScatterGather, + _In_ PVOID Context); typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL; typedef NTSTATUS (NTAPI *PGET_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN PMDL Mdl, - IN PVOID CurrentVa, - IN ULONG Length, - IN PDRIVER_LIST_CONTROL ExecutionRoutine, - IN PVOID Context, - IN BOOLEAN WriteToDevice); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PMDL Mdl, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, + _In_ PVOID Context, + _In_ BOOLEAN WriteToDevice); typedef VOID (NTAPI *PPUT_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN BOOLEAN WriteToDevice); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PSCATTER_GATHER_LIST ScatterGather, + _In_ BOOLEAN WriteToDevice); typedef NTSTATUS (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl OPTIONAL, - IN PVOID CurrentVa, - IN ULONG Length, - OUT PULONG ScatterGatherListSize, - OUT PULONG pNumberOfMapRegisters OPTIONAL); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PMDL Mdl OPTIONAL, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _Out_ PULONG ScatterGatherListSize, + _Out_ OPTIONAL PULONG pNumberOfMapRegisters); typedef NTSTATUS (NTAPI *PBUILD_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN PMDL Mdl, - IN PVOID CurrentVa, - IN ULONG Length, - IN PDRIVER_LIST_CONTROL ExecutionRoutine, - IN PVOID Context, - IN BOOLEAN WriteToDevice, - IN PVOID ScatterGatherBuffer, - IN ULONG ScatterGatherLength); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PMDL Mdl, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, + _In_ PVOID Context, + _In_ BOOLEAN WriteToDevice, + _In_ PVOID ScatterGatherBuffer, + _In_ ULONG ScatterGatherLength); typedef NTSTATUS (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( - IN PDMA_ADAPTER DmaAdapter, - IN PSCATTER_GATHER_LIST ScatterGather, - IN PMDL OriginalMdl, - OUT PMDL *TargetMdl); + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PSCATTER_GATHER_LIST ScatterGather, + _In_ PMDL OriginalMdl, + _Out_ PMDL *TargetMdl); typedef struct _DMA_OPERATIONS { ULONG Size; @@ -5999,13 +6725,18 @@ typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { IO_RESOURCE_LIST List[1]; } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; +_Function_class_(DRIVER_CANCEL) +_Requires_lock_held_(_Global_cancel_spin_lock_) +_Releases_lock_(_Global_cancel_spin_lock_) +_IRQL_requires_min_(DISPATCH_LEVEL) +_IRQL_requires_(DISPATCH_LEVEL) typedef VOID (NTAPI DRIVER_CANCEL)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp); + _Inout_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp); typedef DRIVER_CANCEL *PDRIVER_CANCEL; -typedef struct _IRP { +typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { CSHORT Type; USHORT Size; struct _MDL *MdlAddress; @@ -6071,33 +6802,41 @@ typedef enum _IO_PAGING_PRIORITY { IoPagingPriorityReserved2 } IO_PAGING_PRIORITY; +_Function_class_(IO_COMPLETION_ROUTINE) +_IRQL_requires_same_ typedef NTSTATUS (NTAPI IO_COMPLETION_ROUTINE)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID Context); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ struct _IRP *Irp, + _In_opt_ PVOID Context); typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; +_Function_class_(IO_DPC_ROUTINE) +_IRQL_always_function_min_(DISPATCH_LEVEL) +_IRQL_requires_(DISPATCH_LEVEL) +_IRQL_requires_same_ typedef VOID (NTAPI IO_DPC_ROUTINE)( - IN struct _KDPC *Dpc, - IN struct _DEVICE_OBJECT *DeviceObject, - IN struct _IRP *Irp, - IN PVOID Context); + _In_ struct _KDPC *Dpc, + _In_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ struct _IRP *Irp, + _In_opt_ PVOID Context); typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE; typedef NTSTATUS (NTAPI *PMM_DLL_INITIALIZE)( - IN PUNICODE_STRING RegistryPath); + _In_ PUNICODE_STRING RegistryPath); typedef NTSTATUS (NTAPI *PMM_DLL_UNLOAD)( VOID); +_Function_class_(IO_TIMER_ROUTINE) +_IRQL_requires_same_ typedef VOID (NTAPI IO_TIMER_ROUTINE)( - IN struct _DEVICE_OBJECT *DeviceObject, - IN PVOID Context); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_opt_ PVOID Context); typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE; typedef struct _IO_SECURITY_CONTEXT { @@ -6117,41 +6856,41 @@ typedef struct _IO_CSQ_IRP_CONTEXT { typedef VOID (NTAPI *PIO_CSQ_INSERT_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); + _In_ struct _IO_CSQ *Csq, + _In_ PIRP Irp); typedef NTSTATUS (NTAPI IO_CSQ_INSERT_IRP_EX)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp, - IN PVOID InsertContext); + _In_ struct _IO_CSQ *Csq, + _In_ PIRP Irp, + _In_ PVOID InsertContext); typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX; typedef VOID (NTAPI *PIO_CSQ_REMOVE_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); + _In_ struct _IO_CSQ *Csq, + _In_ PIRP Irp); typedef PIRP (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp, - IN PVOID PeekContext); + _In_ struct _IO_CSQ *Csq, + _In_ PIRP Irp, + _In_ PVOID PeekContext); typedef VOID (NTAPI *PIO_CSQ_ACQUIRE_LOCK)( - IN struct _IO_CSQ *Csq, - OUT PKIRQL Irql); + _In_ struct _IO_CSQ *Csq, + _Out_ PKIRQL Irql); typedef VOID (NTAPI *PIO_CSQ_RELEASE_LOCK)( - IN struct _IO_CSQ *Csq, - IN KIRQL Irql); + _In_ struct _IO_CSQ *Csq, + _In_ KIRQL Irql); typedef VOID (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( - IN struct _IO_CSQ *Csq, - IN PIRP Irp); + _In_ struct _IO_CSQ *Csq, + _In_ PIRP Irp); typedef struct _IO_CSQ { ULONG Type; @@ -6182,6 +6921,8 @@ typedef BOOLEAN PVOID, PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_CONNECT_VECTOR)( PDEVICE_OBJECT, @@ -6192,20 +6933,28 @@ typedef NTSTATUS PVOID, PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_DISCONNECT_VECTOR)( PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_ENABLE_EVENT)( PDEVICE_OBJECT, PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_DISABLE_EVENT)( PDEVICE_OBJECT, PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_CLEAR_STATUS)( PDEVICE_OBJECT, @@ -6216,12 +6965,15 @@ typedef VOID PVOID, ULONG); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( PDEVICE_OBJECT, PDEVICE_NOTIFY_CALLBACK, PVOID); +_IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( PDEVICE_OBJECT, @@ -6247,6 +6999,8 @@ typedef BOOLEAN PVOID ObjectContext, PVOID ServiceContext); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_CONNECT_VECTOR2)( PVOID Context, @@ -6257,37 +7011,49 @@ typedef NTSTATUS PVOID ServiceContext, PVOID *ObjectContext); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_DISCONNECT_VECTOR2)( PVOID Context, PVOID ObjectContext); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_ENABLE_EVENT2)( PVOID Context, PVOID ObjectContext); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_DISABLE_EVENT2)( PVOID Context, PVOID ObjectContext); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PGPE_CLEAR_STATUS2)( PVOID Context, PVOID ObjectContext); +_IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID (NTAPI *PDEVICE_NOTIFY_CALLBACK2)( PVOID NotificationContext, ULONG NotifyCode); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( PVOID Context, PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, PVOID NotificationContext); +_IRQL_requires_max_(DISPATCH_LEVEL) typedef VOID (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( PVOID Context); @@ -6643,6 +7409,8 @@ typedef struct _IO_STACK_LOCATION { #define WMIREGISTER 0 #define WMIUPDATE 1 +_Function_class_(WMI_NOTIFICATION_CALLBACK) +_IRQL_requires_same_ typedef VOID (NTAPI FWMI_NOTIFICATION_CALLBACK)( PVOID Wnode, @@ -7336,14 +8104,18 @@ typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY { #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1 +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( - IN OUT PVOID Context); + _Inout_ PVOID Context); typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE; +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( - IN OUT PVOID Context); + _Inout_ PVOID Context); typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE; typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { @@ -7360,17 +8132,17 @@ typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { typedef ULONG (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( - IN PVOID Context, - OUT PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ PVOID Context, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); typedef ULONG (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( - IN PVOID Context, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length); + _In_ PVOID Context, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Offset, + _In_ ULONG Length); typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { USHORT Size; @@ -7384,31 +8156,35 @@ typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1 +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_MSIX_SET_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry, - IN ULONG MessageNumber); + _In_ PVOID Context, + _In_ ULONG TableEntry, + _In_ ULONG MessageNumber); typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY; +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry); + _In_ PVOID Context, + _In_ ULONG TableEntry); typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY; +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_MSIX_GET_ENTRY)( - IN PVOID Context, - IN ULONG TableEntry, - OUT PULONG MessageNumber, - OUT PBOOLEAN Masked); + _In_ PVOID Context, + _In_ ULONG TableEntry, + _Out_ PULONG MessageNumber, + _Out_ PBOOLEAN Masked); typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY; +_Must_inspect_result_ typedef NTSTATUS (NTAPI PCI_MSIX_GET_TABLE_SIZE)( - IN PVOID Context, - OUT PULONG TableSize); + _In_ PVOID Context, + _Out_ PULONG TableSize); typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE; typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE { @@ -7459,64 +8235,64 @@ typedef ULONG OB_OPERATION; #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION { - IN OUT ACCESS_MASK DesiredAccess; - IN ACCESS_MASK OriginalDesiredAccess; + _Inout_ ACCESS_MASK DesiredAccess; + _In_ ACCESS_MASK OriginalDesiredAccess; } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION; typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION { - IN OUT ACCESS_MASK DesiredAccess; - IN ACCESS_MASK OriginalDesiredAccess; - IN PVOID SourceProcess; - IN PVOID TargetProcess; + _Inout_ ACCESS_MASK DesiredAccess; + _In_ ACCESS_MASK OriginalDesiredAccess; + _In_ PVOID SourceProcess; + _In_ PVOID TargetProcess; } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION; typedef union _OB_PRE_OPERATION_PARAMETERS { - IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation; - IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; + _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation; + _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS; typedef struct _OB_PRE_OPERATION_INFORMATION { - IN OB_OPERATION Operation; + _In_ OB_OPERATION Operation; _ANONYMOUS_UNION union { - IN ULONG Flags; + _In_ ULONG Flags; _ANONYMOUS_STRUCT struct { - IN ULONG KernelHandle:1; - IN ULONG Reserved:31; + _In_ ULONG KernelHandle:1; + _In_ ULONG Reserved:31; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - IN PVOID Object; - IN POBJECT_TYPE ObjectType; - OUT PVOID CallContext; - IN POB_PRE_OPERATION_PARAMETERS Parameters; + _In_ PVOID Object; + _In_ POBJECT_TYPE ObjectType; + _Out_ PVOID CallContext; + _In_ POB_PRE_OPERATION_PARAMETERS Parameters; } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION; typedef struct _OB_POST_CREATE_HANDLE_INFORMATION { - IN ACCESS_MASK GrantedAccess; + _In_ ACCESS_MASK GrantedAccess; } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION; typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION { - IN ACCESS_MASK GrantedAccess; + _In_ ACCESS_MASK GrantedAccess; } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION; typedef union _OB_POST_OPERATION_PARAMETERS { - IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation; - IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; + _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation; + _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation; } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS; typedef struct _OB_POST_OPERATION_INFORMATION { - IN OB_OPERATION Operation; + _In_ OB_OPERATION Operation; _ANONYMOUS_UNION union { - IN ULONG Flags; + _In_ ULONG Flags; _ANONYMOUS_STRUCT struct { - IN ULONG KernelHandle:1; - IN ULONG Reserved:31; + _In_ ULONG KernelHandle:1; + _In_ ULONG Reserved:31; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; - IN PVOID Object; - IN POBJECT_TYPE ObjectType; - IN PVOID CallContext; - IN NTSTATUS ReturnStatus; - IN POB_POST_OPERATION_PARAMETERS Parameters; + _In_ PVOID Object; + _In_ POBJECT_TYPE ObjectType; + _In_ PVOID CallContext; + _In_ NTSTATUS ReturnStatus; + _In_ POB_POST_OPERATION_PARAMETERS Parameters; } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION; typedef enum _OB_PREOP_CALLBACK_STATUS { @@ -7525,27 +8301,27 @@ typedef enum _OB_PREOP_CALLBACK_STATUS { typedef OB_PREOP_CALLBACK_STATUS (NTAPI *POB_PRE_OPERATION_CALLBACK)( - IN PVOID RegistrationContext, - IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation); + _In_ PVOID RegistrationContext, + _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation); typedef VOID (NTAPI *POB_POST_OPERATION_CALLBACK)( - IN PVOID RegistrationContext, - IN POB_POST_OPERATION_INFORMATION OperationInformation); + _In_ PVOID RegistrationContext, + _In_ POB_POST_OPERATION_INFORMATION OperationInformation); typedef struct _OB_OPERATION_REGISTRATION { - IN POBJECT_TYPE *ObjectType; - IN OB_OPERATION Operations; - IN POB_PRE_OPERATION_CALLBACK PreOperation; - IN POB_POST_OPERATION_CALLBACK PostOperation; + _In_ POBJECT_TYPE *ObjectType; + _In_ OB_OPERATION Operations; + _In_ POB_PRE_OPERATION_CALLBACK PreOperation; + _In_ POB_POST_OPERATION_CALLBACK PostOperation; } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION; typedef struct _OB_CALLBACK_REGISTRATION { - IN USHORT Version; - IN USHORT OperationRegistrationCount; - IN UNICODE_STRING Altitude; - IN PVOID RegistrationContext; - IN OB_OPERATION_REGISTRATION *OperationRegistration; + _In_ USHORT Version; + _In_ USHORT OperationRegistrationCount; + _In_ UNICODE_STRING Altitude; + _In_ PVOID RegistrationContext; + _In_ OB_OPERATION_REGISTRATION *OperationRegistration; } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION; typedef struct _OBJECT_NAME_INFORMATION { @@ -7652,548 +8428,20 @@ typedef enum _TRACE_INFORMATION_CLASS { #include +_IRQL_requires_same_ typedef VOID (NTAPI *PETWENABLECALLBACK)( - IN LPCGUID SourceId, - IN ULONG ControlCode, - IN UCHAR Level, - IN ULONGLONG MatchAnyKeyword, - IN ULONGLONG MatchAllKeyword, - IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL, - IN OUT PVOID CallbackContext OPTIONAL); + _In_ LPCGUID SourceId, + _In_ ULONG ControlCode, + _In_ UCHAR Level, + _In_ ULONGLONG MatchAnyKeyword, + _In_ ULONGLONG MatchAllKeyword, + _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, + _Inout_opt_ PVOID CallbackContext); #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001 -#if defined(_M_IX86) -/** Kernel definitions for x86 **/ - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CMCI_LEVEL 5 -#define PROFILE_LEVEL 27 -#define CLOCK1_LEVEL 28 -#define CLOCK2_LEVEL 28 -#define IPI_LEVEL 29 -#define POWER_LEVEL 30 -#define HIGH_LEVEL 31 -#define CLOCK_LEVEL CLOCK2_LEVEL - -#define KIP0PCRADDRESS 0xffdff000 -#define KI_USER_SHARED_DATA 0xffdf0000 -#define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA) - -#define PAGE_SIZE 0x1000 -#define PAGE_SHIFT 12L -#define KeGetDcacheFillSize() 1L - -#define EFLAG_SIGN 0x8000 -#define EFLAG_ZERO 0x4000 -#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) - -#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) -#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) -#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) - - -typedef struct _KFLOATING_SAVE { - ULONG ControlWord; - ULONG StatusWord; - ULONG ErrorOffset; - ULONG ErrorSelector; - ULONG DataOffset; - ULONG DataSelector; - ULONG Cr0NpxState; - ULONG Spare1; -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount; - -#define YieldProcessor _mm_pause - -FORCEINLINE -VOID -KeMemoryBarrier(VOID) -{ - LONG Barrier, *Dummy = &Barrier; - UNREFERENCED_LOCAL_VARIABLE(Dummy); - -#if defined(__GNUC__) - __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); -#elif defined(_MSC_VER) - __asm xchg [Barrier], eax -#endif -} - -#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() - -NTHALAPI -KIRQL -NTAPI -KeGetCurrentIrql(VOID); - -NTHALAPI -VOID -FASTCALL -KfLowerIrql( - IN KIRQL NewIrql); -#define KeLowerIrql(a) KfLowerIrql(a) - -NTHALAPI -KIRQL -FASTCALL -KfRaiseIrql( - IN KIRQL NewIrql); -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); - -NTHALAPI -KIRQL -FASTCALL -KfAcquireSpinLock( - IN OUT PKSPIN_LOCK SpinLock); -#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) - -NTHALAPI -VOID -FASTCALL -KfReleaseSpinLock( - IN OUT PKSPIN_LOCK SpinLock, - IN KIRQL NewIrql); -#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) - -NTKERNELAPI -VOID -FASTCALL -KefAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); -#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) - -NTKERNELAPI -VOID -FASTCALL -KefReleaseSpinLockFromDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); -#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) - -NTSYSAPI -PKTHREAD -NTAPI -KeGetCurrentThread(VOID); - -NTKERNELAPI -NTSTATUS -NTAPI -KeSaveFloatingPointState( - OUT PKFLOATING_SAVE FloatSave); - -NTKERNELAPI -NTSTATUS -NTAPI -KeRestoreFloatingPointState( - IN PKFLOATING_SAVE FloatSave); - -/* VOID - * KeFlushIoBuffers( - * IN PMDL Mdl, - * IN BOOLEAN ReadOperation, - * IN BOOLEAN DmaOperation) - */ -#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) - -/* x86 and x64 performs a 0x2C interrupt */ -#define DbgRaiseAssertionFailure __int2c - -FORCEINLINE -VOID -_KeQueryTickCount( - OUT PLARGE_INTEGER CurrentCount) -{ - for (;;) { -#ifdef NONAMELESSUNION - CurrentCount->s.HighPart = KeTickCount.High1Time; - CurrentCount->s.LowPart = KeTickCount.LowPart; - if (CurrentCount->s.HighPart == KeTickCount.High2Time) break; -#else - CurrentCount->HighPart = KeTickCount.High1Time; - CurrentCount->LowPart = KeTickCount.LowPart; - if (CurrentCount->HighPart == KeTickCount.High2Time) break; -#endif - YieldProcessor(); - } -} -#define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount) - - - - - -#elif defined(_M_AMD64) -/** Kernel definitions for AMD64 **/ - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CMCI_LEVEL 5 -#define CLOCK_LEVEL 13 -#define IPI_LEVEL 14 -#define DRS_LEVEL 14 -#define POWER_LEVEL 14 -#define PROFILE_LEVEL 15 -#define HIGH_LEVEL 15 - -#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL -#define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) -#define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8) -#define SharedSystemTime (KI_USER_SHARED_DATA + 0x14) -#define SharedTickCount (KI_USER_SHARED_DATA + 0x320) - -#define PAGE_SIZE 0x1000 -#define PAGE_SHIFT 12L - -#define EFLAG_SIGN 0x8000 -#define EFLAG_ZERO 0x4000 -#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) - -typedef struct _KFLOATING_SAVE { - ULONG Dummy; -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; - -#define KeQueryInterruptTime() \ - (*(volatile ULONG64*)SharedInterruptTime) - -#define KeQuerySystemTime(CurrentCount) \ - *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime - -#define KeQueryTickCount(CurrentCount) \ - *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount - -#define KeGetDcacheFillSize() 1L - -#define YieldProcessor _mm_pause -#define FastFence __faststorefence -#define LoadFence _mm_lfence -#define MemoryFence _mm_mfence -#define StoreFence _mm_sfence -#define LFENCE_ACQUIRE() LoadFence() - -FORCEINLINE -VOID -KeMemoryBarrier(VOID) -{ - // FIXME: Do we really need lfence after the __faststorefence ? - FastFence(); - LFENCE_ACQUIRE(); -} - -#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() - -FORCEINLINE -KIRQL -KeGetCurrentIrql(VOID) -{ - return (KIRQL)__readcr8(); -} - -FORCEINLINE -VOID -KeLowerIrql(IN KIRQL NewIrql) -{ - //ASSERT(KeGetCurrentIrql() >= NewIrql); - __writecr8(NewIrql); -} - -FORCEINLINE -KIRQL -KfRaiseIrql(IN KIRQL NewIrql) -{ - KIRQL OldIrql; - - OldIrql = (KIRQL)__readcr8(); - //ASSERT(OldIrql <= NewIrql); - __writecr8(NewIrql); - return OldIrql; -} -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -FORCEINLINE -KIRQL -KeRaiseIrqlToDpcLevel(VOID) -{ - return KfRaiseIrql(DISPATCH_LEVEL); -} - -FORCEINLINE -KIRQL -KeRaiseIrqlToSynchLevel(VOID) -{ - return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 -} - -FORCEINLINE -PKTHREAD -KeGetCurrentThread(VOID) -{ - return (struct _KTHREAD *)__readgsqword(0x188); -} - -FORCEINLINE -NTSTATUS -KeSaveFloatingPointState(PVOID FloatingState) -{ - UNREFERENCED_PARAMETER(FloatingState); - return STATUS_SUCCESS; -} - -FORCEINLINE -NTSTATUS -KeRestoreFloatingPointState(PVOID FloatingState) -{ - UNREFERENCED_PARAMETER(FloatingState); - return STATUS_SUCCESS; -} - -/* VOID - * KeFlushIoBuffers( - * IN PMDL Mdl, - * IN BOOLEAN ReadOperation, - * IN BOOLEAN DmaOperation) - */ -#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) - -/* x86 and x64 performs a 0x2C interrupt */ -#define DbgRaiseAssertionFailure __int2c - -#elif defined(_M_IA64) -/** Kernel definitions for IA64 **/ - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CMC_LEVEL 3 -#define DEVICE_LEVEL_BASE 4 -#define PC_LEVEL 12 -#define IPI_LEVEL 14 -#define DRS_LEVEL 14 -#define CLOCK_LEVEL 13 -#define POWER_LEVEL 15 -#define PROFILE_LEVEL 15 -#define HIGH_LEVEL 15 - -#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) -extern volatile LARGE_INTEGER KeTickCount; - -#define PAUSE_PROCESSOR __yield(); - -FORCEINLINE -VOID -KeFlushWriteBuffer(VOID) -{ - __mf (); - return; -} - -NTSYSAPI -PKTHREAD -NTAPI -KeGetCurrentThread(VOID); - - -#elif defined(_M_PPC) - -/* Interrupt request levels */ -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define PROFILE_LEVEL 27 -#define CLOCK1_LEVEL 28 -#define CLOCK2_LEVEL 28 -#define IPI_LEVEL 29 -#define POWER_LEVEL 30 -#define HIGH_LEVEL 31 - -// -// Used to contain PFNs and PFN counts -// -typedef ULONG PFN_COUNT; -typedef ULONG PFN_NUMBER, *PPFN_NUMBER; -typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; - - -typedef struct _KFLOATING_SAVE { - ULONG Dummy; -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -typedef struct _KPCR_TIB { - PVOID ExceptionList; /* 00 */ - PVOID StackBase; /* 04 */ - PVOID StackLimit; /* 08 */ - PVOID SubSystemTib; /* 0C */ - _ANONYMOUS_UNION union { - PVOID FiberData; /* 10 */ - ULONG Version; /* 10 */ - } DUMMYUNIONNAME; - PVOID ArbitraryUserPointer; /* 14 */ - struct _KPCR_TIB *Self; /* 18 */ -} KPCR_TIB, *PKPCR_TIB; /* 1C */ - -#define PCR_MINOR_VERSION 1 -#define PCR_MAJOR_VERSION 1 - -typedef struct _KPCR { - KPCR_TIB Tib; /* 00 */ - struct _KPCR *Self; /* 1C */ - struct _KPRCB *Prcb; /* 20 */ - KIRQL Irql; /* 24 */ - ULONG IRR; /* 28 */ - ULONG IrrActive; /* 2C */ - ULONG IDR; /* 30 */ - PVOID KdVersionBlock; /* 34 */ - PUSHORT IDT; /* 38 */ - PUSHORT GDT; /* 3C */ - struct _KTSS *TSS; /* 40 */ - USHORT MajorVersion; /* 44 */ - USHORT MinorVersion; /* 46 */ - KAFFINITY SetMember; /* 48 */ - ULONG StallScaleFactor; /* 4C */ - UCHAR SpareUnused; /* 50 */ - UCHAR Number; /* 51 */ -} KPCR, *PKPCR; /* 54 */ - -#define KeGetPcr() PCR - -#define YieldProcessor() __asm__ __volatile__("nop"); - -FORCEINLINE -ULONG -NTAPI -KeGetCurrentProcessorNumber(VOID) -{ - ULONG Number; - __asm__ __volatile__ ( - "lwz %0, %c1(12)\n" - : "=r" (Number) - : "i" (FIELD_OFFSET(KPCR, Number)) - ); - return Number; -} - -NTHALAPI -VOID -FASTCALL -KfLowerIrql( - IN KIRQL NewIrql); -#define KeLowerIrql(a) KfLowerIrql(a) - -NTHALAPI -KIRQL -FASTCALL -KfRaiseIrql( - IN KIRQL NewIrql); -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); - -NTHALAPI -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); - - - -#elif defined(_M_MIPS) -#error MIPS Headers are totally incorrect - -// -// Used to contain PFNs and PFN counts -// -typedef ULONG PFN_COUNT; -typedef ULONG PFN_NUMBER, *PPFN_NUMBER; -typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; - -#define PASSIVE_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define PROFILE_LEVEL 27 -#define IPI_LEVEL 29 -#define HIGH_LEVEL 31 - -typedef struct _KPCR { - struct _KPRCB *Prcb; /* 20 */ - KIRQL Irql; /* 24 */ - ULONG IRR; /* 28 */ - ULONG IDR; /* 30 */ -} KPCR, *PKPCR; - -#define KeGetPcr() PCR - -typedef struct _KFLOATING_SAVE { -} KFLOATING_SAVE, *PKFLOATING_SAVE; - -static __inline -ULONG -NTAPI -KeGetCurrentProcessorNumber(VOID) -{ - return 0; -} - -#define YieldProcessor() __asm__ __volatile__("nop"); - -#define KeLowerIrql(a) KfLowerIrql(a) -#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) - -NTKERNELAPI -VOID -NTAPI -KfLowerIrql( - IN KIRQL NewIrql); - -NTKERNELAPI -KIRQL -NTAPI -KfRaiseIrql( - IN KIRQL NewIrql); - -NTKERNELAPI -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID); - -NTKERNELAPI -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID); - - -#elif defined(_M_ARM) -#include -#else -#error Unknown Architecture -#endif - /****************************************************************************** * Runtime Library Functions * ******************************************************************************/ @@ -8206,15 +8454,16 @@ KeRaiseIrqlToSynchLevel(VOID); FORCEINLINE VOID InitializeListHead( - OUT PLIST_ENTRY ListHead) + _Out_ PLIST_ENTRY ListHead) { ListHead->Flink = ListHead->Blink = ListHead; } +_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty( - IN CONST LIST_ENTRY * ListHead) + _In_ const LIST_ENTRY * ListHead) { return (BOOLEAN)(ListHead->Flink == ListHead); } @@ -8222,7 +8471,7 @@ IsListEmpty( FORCEINLINE BOOLEAN RemoveEntryList( - IN PLIST_ENTRY Entry) + _In_ PLIST_ENTRY Entry) { PLIST_ENTRY OldFlink; PLIST_ENTRY OldBlink; @@ -8237,7 +8486,7 @@ RemoveEntryList( FORCEINLINE PLIST_ENTRY RemoveHeadList( - IN OUT PLIST_ENTRY ListHead) + _Inout_ PLIST_ENTRY ListHead) { PLIST_ENTRY Flink; PLIST_ENTRY Entry; @@ -8252,7 +8501,7 @@ RemoveHeadList( FORCEINLINE PLIST_ENTRY RemoveTailList( - IN OUT PLIST_ENTRY ListHead) + _Inout_ PLIST_ENTRY ListHead) { PLIST_ENTRY Blink; PLIST_ENTRY Entry; @@ -8267,8 +8516,8 @@ RemoveTailList( FORCEINLINE VOID InsertTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY Entry) + _Inout_ PLIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PLIST_ENTRY Entry) { PLIST_ENTRY OldBlink; OldBlink = ListHead->Blink; @@ -8281,8 +8530,8 @@ InsertTailList( FORCEINLINE VOID InsertHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY Entry) + _Inout_ PLIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PLIST_ENTRY Entry) { PLIST_ENTRY OldFlink; OldFlink = ListHead->Flink; @@ -8295,8 +8544,8 @@ InsertHeadList( FORCEINLINE VOID AppendTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListToAppend) + _Inout_ PLIST_ENTRY ListHead, + _Inout_ PLIST_ENTRY ListToAppend) { PLIST_ENTRY ListEnd = ListHead->Blink; @@ -8309,7 +8558,7 @@ AppendTailList( FORCEINLINE PSINGLE_LIST_ENTRY PopEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead) + _Inout_ PSINGLE_LIST_ENTRY ListHead) { PSINGLE_LIST_ENTRY FirstEntry; FirstEntry = ListHead->Next; @@ -8322,8 +8571,8 @@ PopEntryList( FORCEINLINE VOID PushEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead, - IN OUT PSINGLE_LIST_ENTRY Entry) + _Inout_ PSINGLE_LIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry) { Entry->Next = ListHead->Next; ListHead->Next = Entry; @@ -8331,14 +8580,15 @@ PushEntryList( #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */ +__analysis_noreturn NTSYSAPI VOID NTAPI RtlAssert( - IN PVOID FailedAssertion, - IN PVOID FileName, - IN ULONG LineNumber, - IN PSTR Message); + _In_ PVOID FailedAssertion, + _In_ PVOID FileName, + _In_ ULONG LineNumber, + _In_opt_ PSTR Message); /* VOID * RtlCopyMemory( @@ -8356,9 +8606,9 @@ NTSYSAPI VOID NTAPI RtlCopyMemoryNonTemporal( - VOID UNALIGNED *Destination, - CONST VOID UNALIGNED *Source, - SIZE_T Length); + _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination, + _In_reads_bytes_(Length) const VOID UNALIGNED *Source, + _In_ SIZE_T Length); #else #define RtlCopyMemoryNonTemporal RtlCopyMemory #endif @@ -8391,25 +8641,33 @@ RtlCopyMemoryNonTemporal( #define RtlFillBytes RtlFillMemory +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlFreeUnicodeString( - IN OUT PUNICODE_STRING UnicodeString); + _Inout_ _At_(UnicodeString->Buffer, __drv_freesMem(Mem)) + PUNICODE_STRING UnicodeString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlGUIDFromString( - IN PUNICODE_STRING GuidString, - OUT GUID *Guid); + _In_ PUNICODE_STRING GuidString, + _Out_ GUID *Guid); +_IRQL_requires_max_(DISPATCH_LEVEL) +_At_(DestinationString->Buffer, _Post_equal_to_(SourceString)) +//_At_(DestinationString->Length, _Post_equal_to_(_String_length_(SourceString) * sizeof(WCHAR))) +_At_(DestinationString->MaximumLength, _Post_equal_to_(DestinationString->Length + sizeof(WCHAR))) NTSYSAPI VOID NTAPI RtlInitUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCWSTR SourceString OPTIONAL); + _Out_ PUNICODE_STRING DestinationString, + _In_opt_z_ __drv_aliasesMem PCWSTR SourceString); /* VOID * RtlMoveMemory( @@ -8420,12 +8678,15 @@ RtlInitUnicodeString( #define RtlMoveMemory(Destination, Source, Length) \ memmove(Destination, Source, Length) +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlStringFromGUID( - IN REFGUID Guid, - OUT PUNICODE_STRING GuidString); + _In_ REFGUID Guid, + _Out_ _At_(GuidString->Buffer, __drv_allocatesMem(Mem)) + PUNICODE_STRING GuidString); /* VOID * RtlZeroMemory( @@ -8439,35 +8700,42 @@ RtlStringFromGUID( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlAreBitsClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG Length); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG StartingIndex, + _In_ ULONG Length); +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlAreBitsSet( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG Length); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG StartingIndex, + _In_ ULONG Length); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PANSI_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PUNICODE_STRING DestinationString, + _In_ PANSI_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI ULONG NTAPI RtlxAnsiStringToUnicodeSize( - IN PCANSI_STRING AnsiString); + _In_ PCANSI_STRING AnsiString); #define RtlAnsiStringToUnicodeSize(String) ( \ NLS_MB_CODE_PAGE_TAG ? \ @@ -8475,119 +8743,156 @@ RtlxAnsiStringToUnicodeSize( ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ ) +_Success_(1) +_Unchanged_(Destination->MaximumLength) +_Unchanged_(Destination->Buffer) +_When_(_Old_(Destination->Length) + Source->Length <= Destination->MaximumLength, + _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + Source->Length)) + _At_(return, _Out_range_(==, 0))) +_When_(_Old_(Destination->Length) + Source->Length > Destination->MaximumLength, + _Unchanged_(Destination->Length) + _At_(return, _Out_range_(<, 0))) NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString( - IN OUT PUNICODE_STRING Destination, - IN PCUNICODE_STRING Source); + _Inout_ PUNICODE_STRING Destination, + _In_ PCUNICODE_STRING Source); +_Success_(1) +_Unchanged_(Destination->MaximumLength) +_Unchanged_(Destination->Buffer) +/* _When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) <= Destination->MaximumLength, + _At_(Destination->Length, _Post_equal_to_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR))) + _At_(return, _Out_range_(==, 0))) +_When_(_Old_(Destination->Length) + _String_length_(Source) * sizeof(WCHAR) > Destination->MaximumLength, + _Unchanged_(Destination->Length) + _At_(return, _Out_range_(<, 0))) */ NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeToString( - IN OUT PUNICODE_STRING Destination, - IN PCWSTR Source); + _Inout_ PUNICODE_STRING Destination, + _In_opt_z_ PCWSTR Source); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlCheckRegistryKey( - IN ULONG RelativeTo, - IN PWSTR Path); + _In_ ULONG RelativeTo, + _In_ PWSTR Path); NTSYSAPI VOID NTAPI RtlClearAllBits( - IN PRTL_BITMAP BitMapHeader); + _In_ PRTL_BITMAP BitMapHeader); NTSYSAPI VOID NTAPI RtlClearBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG NumberToClear); + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToClear) ULONG StartingIndex, + _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToClear); +_Must_inspect_result_ NTSYSAPI SIZE_T NTAPI RtlCompareMemory( - IN CONST VOID *Source1, - IN CONST VOID *Source2, - IN SIZE_T Length); + _In_ const VOID *Source1, + _In_ const VOID *Source2, + _In_ SIZE_T Length); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI LONG NTAPI RtlCompareUnicodeString( - IN PCUNICODE_STRING String1, - IN PCUNICODE_STRING String2, - IN BOOLEAN CaseInSensitive); + _In_ PCUNICODE_STRING String1, + _In_ PCUNICODE_STRING String2, + _In_ BOOLEAN CaseInSensitive); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI LONG NTAPI RtlCompareUnicodeStrings( - IN PCWCH String1, - IN SIZE_T String1Length, - IN PCWCH String2, - IN SIZE_T String2Length, - IN BOOLEAN CaseInSensitive); + _In_reads_(String1Length) PCWCH String1, + _In_ SIZE_T String1Length, + _In_reads_(String2Length) PCWCH String2, + _In_ SIZE_T String2Length, + _In_ BOOLEAN CaseInSensitive); +_Unchanged_(DestinationString->Buffer) +_Unchanged_(DestinationString->MaximumLength) +_At_(DestinationString->Length, + _When_(SourceString->Length > DestinationString->MaximumLength, + _Post_equal_to_(DestinationString->MaximumLength)) + _When_(SourceString->Length <= DestinationString->MaximumLength, + _Post_equal_to_(SourceString->Length))) NTSYSAPI VOID NTAPI RtlCopyUnicodeString( - IN OUT PUNICODE_STRING DestinationString, - IN PCUNICODE_STRING SourceString OPTIONAL); + _Inout_ PUNICODE_STRING DestinationString, + _In_opt_ PCUNICODE_STRING SourceString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCreateRegistryKey( - IN ULONG RelativeTo, - IN PWSTR Path); + _In_ ULONG RelativeTo, + _In_ PWSTR Path); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN ULONG Revision); + _Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ ULONG Revision); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlDeleteRegistryValue( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN PCWSTR ValueName); + _In_ ULONG RelativeTo, + _In_ PCWSTR Path, + _In_z_ PCWSTR ValueName); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString( - IN CONST UNICODE_STRING *String1, - IN CONST UNICODE_STRING *String2, - IN BOOLEAN CaseInSensitive); + _In_ CONST UNICODE_STRING *String1, + _In_ CONST UNICODE_STRING *String2, + _In_ BOOLEAN CaseInSensitive); #if !defined(_AMD64_) && !defined(_IA64_) NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedIntegerMultiply( - IN LARGE_INTEGER Multiplicand, - IN LONG Multiplier); + _In_ LARGE_INTEGER Multiplicand, + _In_ LONG Multiplier); NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN ULONG Divisor, - OUT PULONG Remainder OPTIONAL); + _In_ LARGE_INTEGER Dividend, + _In_ ULONG Divisor, + _Out_opt_ PULONG Remainder); #endif #if defined(_X86_) || defined(_IA64_) @@ -8595,137 +8900,155 @@ NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedMagicDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER MagicDivisor, - IN CCHAR ShiftCount); + _In_ LARGE_INTEGER Dividend, + _In_ LARGE_INTEGER MagicDivisor, + _In_ CCHAR ShiftCount); #endif +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI VOID NTAPI RtlFreeAnsiString( - IN PANSI_STRING AnsiString); + _Inout_ _At_(AnsiString->Buffer, __drv_freesMem(Mem)) + PANSI_STRING AnsiString); +_Success_(return != -1) +_Must_inspect_result_ NTSYSAPI ULONG NTAPI RtlFindClearBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG NumberToFind, + _In_ ULONG HintIndex); +_Success_(return != -1) NTSYSAPI ULONG NTAPI RtlFindClearBitsAndSet( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG NumberToFind, + _In_ ULONG HintIndex); NTSYSAPI ULONG NTAPI RtlFindFirstRunClear( - IN PRTL_BITMAP BitMapHeader, - OUT PULONG StartingIndex); + _In_ PRTL_BITMAP BitMapHeader, + _Out_ PULONG StartingIndex); NTSYSAPI ULONG NTAPI RtlFindClearRuns( - IN PRTL_BITMAP BitMapHeader, - OUT PRTL_BITMAP_RUN RunArray, - IN ULONG SizeOfRunArray, - IN BOOLEAN LocateLongestRuns); + _In_ PRTL_BITMAP BitMapHeader, + _Out_writes_to_(SizeOfRunArray, return) PRTL_BITMAP_RUN RunArray, + _In_range_(>, 0) ULONG SizeOfRunArray, + _In_ BOOLEAN LocateLongestRuns); NTSYSAPI ULONG NTAPI RtlFindLastBackwardRunClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - OUT PULONG StartingRunIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG FromIndex, + _Out_ PULONG StartingRunIndex); +_Success_(return != -1) +_Must_inspect_result_ NTSYSAPI CCHAR NTAPI RtlFindLeastSignificantBit( - IN ULONGLONG Set); + _In_ ULONGLONG Set); NTSYSAPI ULONG NTAPI RtlFindLongestRunClear( - IN PRTL_BITMAP BitMapHeader, - OUT PULONG StartingIndex); + _In_ PRTL_BITMAP BitMapHeader, + _Out_ PULONG StartingIndex); +_Success_(return != -1) +_Must_inspect_result_ NTSYSAPI CCHAR NTAPI RtlFindMostSignificantBit( - IN ULONGLONG Set); + _In_ ULONGLONG Set); NTSYSAPI ULONG NTAPI RtlFindNextForwardRunClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG FromIndex, - OUT PULONG StartingRunIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG FromIndex, + _Out_ PULONG StartingRunIndex); +_Success_(return != -1) +_Must_inspect_result_ NTSYSAPI ULONG NTAPI RtlFindSetBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG NumberToFind, + _In_ ULONG HintIndex); +_Success_(return != -1) NTSYSAPI ULONG NTAPI RtlFindSetBitsAndClear( - IN PRTL_BITMAP BitMapHeader, - IN ULONG NumberToFind, - IN ULONG HintIndex); + _In_ PRTL_BITMAP BitMapHeader, + _In_ ULONG NumberToFind, + _In_ ULONG HintIndex); +_IRQL_requires_max_(DISPATCH_LEVEL) NTSYSAPI VOID NTAPI RtlInitAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCSZ SourceString); + _Out_ PANSI_STRING DestinationString, + _In_opt_z_ __drv_aliasesMem PCSZ SourceString); NTSYSAPI VOID NTAPI RtlInitializeBitMap( - IN PRTL_BITMAP BitMapHeader, - IN PULONG BitMapBuffer, - IN ULONG SizeOfBitMap); + _Out_ PRTL_BITMAP BitMapHeader, + _In_ __drv_aliasesMem PULONG BitMapBuffer, + _In_ ULONG SizeOfBitMap); +_IRQL_requires_max_(DISPATCH_LEVEL) NTSYSAPI VOID NTAPI RtlInitString( - IN OUT PSTRING DestinationString, - IN PCSZ SourceString); + _Out_ PSTRING DestinationString, + _In_opt_z_ __drv_aliasesMem PCSZ SourceString); +_IRQL_requires_max_(PASSIVE_LEVEL) +_At_(String->MaximumLength, _Const_) NTSYSAPI NTSTATUS NTAPI RtlIntegerToUnicodeString( - IN ULONG Value, - IN ULONG Base OPTIONAL, - IN OUT PUNICODE_STRING String); + _In_ ULONG Value, + _In_opt_ ULONG Base, + _Inout_ PUNICODE_STRING String); +_IRQL_requires_max_(PASSIVE_LEVEL) +_At_(String->MaximumLength, _Const_) NTSYSAPI NTSTATUS NTAPI RtlInt64ToUnicodeString( - IN ULONGLONG Value, - IN ULONG Base OPTIONAL, - IN OUT PUNICODE_STRING String); + _In_ ULONGLONG Value, + _In_opt_ ULONG Base, + _Inout_ PUNICODE_STRING String); #ifdef _WIN64 #define RtlIntPtrToUnicodeString(Value, Base, String) \ @@ -8742,33 +9065,36 @@ RtlInt64ToUnicodeString( #define RtlIsZeroLuid(_L1) \ ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart))) +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI ULONG NTAPI RtlLengthSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); NTSYSAPI ULONG NTAPI RtlNumberOfClearBits( - IN PRTL_BITMAP BitMapHeader); + _In_ PRTL_BITMAP BitMapHeader); NTSYSAPI ULONG NTAPI RtlNumberOfSetBits( - IN PRTL_BITMAP BitMapHeader); + _In_ PRTL_BITMAP BitMapHeader); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlQueryRegistryValues( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable, - IN PVOID Context OPTIONAL, - IN PVOID Environment OPTIONAL); + _In_ ULONG RelativeTo, + _In_ PCWSTR Path, + _Inout_ _At_(*(*QueryTable).EntryContext, _Post_valid_) + PRTL_QUERY_REGISTRY_TABLE QueryTable, + _In_opt_ PVOID Context, + _In_opt_ PVOID Environment); #define SHORT_SIZE (sizeof(USHORT)) #define SHORT_MASK (SHORT_SIZE - 1) @@ -8787,24 +9113,25 @@ NTSYSAPI VOID NTAPI RtlSetAllBits( - IN PRTL_BITMAP BitMapHeader); + _In_ PRTL_BITMAP BitMapHeader); NTSYSAPI VOID NTAPI RtlSetBits( - IN PRTL_BITMAP BitMapHeader, - IN ULONG StartingIndex, - IN ULONG NumberToSet); + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(0, BitMapHeader->SizeOfBitMap - NumberToSet) ULONG StartingIndex, + _In_range_(0, BitMapHeader->SizeOfBitMap - StartingIndex) ULONG NumberToSet); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlSetDaclSecurityDescriptor( - IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, - IN BOOLEAN DaclPresent, - IN PACL Dacl OPTIONAL, - IN BOOLEAN DaclDefaulted OPTIONAL); + _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ BOOLEAN DaclPresent, + _In_opt_ PACL Dacl, + _In_opt_ BOOLEAN DaclDefaulted); #if defined(_AMD64_) @@ -8917,45 +9244,57 @@ RtlSetDaclSecurityDescriptor( #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value) #endif /* _WIN64 */ +_Success_(return != 0) NTSYSAPI BOOLEAN NTAPI RtlTimeFieldsToTime( - IN PTIME_FIELDS TimeFields, - IN PLARGE_INTEGER Time); + _In_ PTIME_FIELDS TimeFields, + _Out_ PLARGE_INTEGER Time); NTSYSAPI VOID NTAPI RtlTimeToTimeFields( - IN PLARGE_INTEGER Time, - IN PTIME_FIELDS TimeFields); + _In_ PLARGE_INTEGER Time, + _Out_ PTIME_FIELDS TimeFields); NTSYSAPI ULONG FASTCALL RtlUlongByteSwap( - IN ULONG Source); + _In_ ULONG Source); NTSYSAPI ULONGLONG FASTCALL RtlUlonglongByteSwap( - IN ULONGLONG Source); + _In_ ULONGLONG Source); +_When_(AllocateDestinationString, + _At_(DestinationString->MaximumLength, + _Out_range_(<=, (SourceString->MaximumLength / sizeof(WCHAR))))) +_When_(!AllocateDestinationString, + _At_(DestinationString->Buffer, _Const_) + _At_(DestinationString->MaximumLength, _Const_)) +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(AllocateDestinationString, _Must_inspect_result_) NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString( - IN OUT PANSI_STRING DestinationString, - IN PCUNICODE_STRING SourceString, - IN BOOLEAN AllocateDestinationString); + _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))) + _When_(!AllocateDestinationString, _Inout_) + PANSI_STRING DestinationString, + _In_ PCUNICODE_STRING SourceString, + _In_ BOOLEAN AllocateDestinationString); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI ULONG NTAPI RtlxUnicodeStringToAnsiSize( - IN PCUNICODE_STRING UnicodeString); + _In_ PCUNICODE_STRING UnicodeString); #define RtlUnicodeStringToAnsiSize(String) ( \ NLS_MB_CODE_PAGE_TAG ? \ @@ -8963,50 +9302,57 @@ RtlxUnicodeStringToAnsiSize( ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ ) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToInteger( - IN PCUNICODE_STRING String, - IN ULONG Base OPTIONAL, - OUT PULONG Value); + _In_ PCUNICODE_STRING String, + _In_opt_ ULONG Base, + _Out_ PULONG Value); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI WCHAR NTAPI RtlUpcaseUnicodeChar( - IN WCHAR SourceCharacter); + _In_ WCHAR SourceCharacter); NTSYSAPI USHORT FASTCALL RtlUshortByteSwap( - IN USHORT Source); + _In_ USHORT Source); +_IRQL_requires_max_(APC_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlValidRelativeSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, - IN ULONG SecurityDescriptorLength, - IN SECURITY_INFORMATION RequiredInformation); + _In_reads_bytes_(SecurityDescriptorLength) PSECURITY_DESCRIPTOR SecurityDescriptorInput, + _In_ ULONG SecurityDescriptorLength, + _In_ SECURITY_INFORMATION RequiredInformation); +_IRQL_requires_max_(APC_LEVEL) +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlValidSecurityDescriptor( - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlWriteRegistryValue( - IN ULONG RelativeTo, - IN PCWSTR Path, - IN PCWSTR ValueName, - IN ULONG ValueType, - IN PVOID ValueData, - IN ULONG ValueLength); + _In_ ULONG RelativeTo, + _In_ PCWSTR Path, + _In_z_ PCWSTR ValueName, + _In_ ULONG ValueType, + _In_reads_bytes_opt_(ValueLength) PVOID ValueData, + _In_ ULONG ValueLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -9017,8 +9363,8 @@ NTSYSAPI VOID FASTCALL RtlPrefetchMemoryNonTemporal( - IN PVOID Source, - IN SIZE_T Length); + _In_ PVOID Source, + _In_ SIZE_T Length); #endif @@ -9029,37 +9375,40 @@ NTSYSAPI VOID NTAPI RtlClearBit( - PRTL_BITMAP BitMapHeader, - ULONG BitNumber); + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI WCHAR NTAPI RtlDowncaseUnicodeChar( - IN WCHAR SourceCharacter); + _In_ WCHAR SourceCharacter); NTSYSAPI VOID NTAPI RtlSetBit( - PRTL_BITMAP BitMapHeader, - ULONG BitNumber); + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); +_Must_inspect_result_ NTSYSAPI BOOLEAN NTAPI RtlTestBit( - IN PRTL_BITMAP BitMapHeader, - IN ULONG BitNumber); + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitNumber); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI RtlHashUnicodeString( - IN CONST UNICODE_STRING *String, - IN BOOLEAN CaseInSensitive, - IN ULONG HashAlgorithm, - OUT PULONG HashValue); + _In_ CONST UNICODE_STRING *String, + _In_ BOOLEAN CaseInSensitive, + _In_ ULONG HashAlgorithm, + _Out_ PULONG HashValue); @@ -9072,75 +9421,81 @@ NTSYSAPI ULONG NTAPI RtlNumberOfSetBitsUlongPtr( - IN ULONG_PTR Target); + _In_ ULONG_PTR Target); NTSYSAPI ULONGLONG NTAPI RtlIoDecodeMemIoResource( - IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, - OUT PULONGLONG Alignment OPTIONAL, - OUT PULONGLONG MinimumAddress OPTIONAL, - OUT PULONGLONG MaximumAddress OPTIONAL); + _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor, + _Out_opt_ PULONGLONG Alignment, + _Out_opt_ PULONGLONG MinimumAddress, + _Out_opt_ PULONGLONG MaximumAddress); NTSYSAPI NTSTATUS NTAPI RtlIoEncodeMemIoResource( - IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor, - IN UCHAR Type, - IN ULONGLONG Length, - IN ULONGLONG Alignment, - IN ULONGLONG MinimumAddress, - IN ULONGLONG MaximumAddress); + _In_ struct _IO_RESOURCE_DESCRIPTOR *Descriptor, + _In_ UCHAR Type, + _In_ ULONGLONG Length, + _In_ ULONGLONG Alignment, + _In_ ULONGLONG MinimumAddress, + _In_ ULONGLONG MaximumAddress); NTSYSAPI ULONGLONG NTAPI RtlCmDecodeMemIoResource( - IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, - OUT PULONGLONG Start OPTIONAL); + _In_ struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor, + _Out_opt_ PULONGLONG Start); NTSYSAPI NTSTATUS NTAPI RtlFindClosestEncodableLength( - IN ULONGLONG SourceLength, - OUT PULONGLONG TargetLength); + _In_ ULONGLONG SourceLength, + _Out_ PULONGLONG TargetLength); NTSYSAPI NTSTATUS NTAPI RtlCmEncodeMemIoResource( - IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, - IN UCHAR Type, - IN ULONGLONG Length, - IN ULONGLONG Start); + _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor, + _In_ UCHAR Type, + _In_ ULONGLONG Length, + _In_ ULONGLONG Start); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUnicodeToUTF8N( - OUT PCHAR UTF8StringDestination, - IN ULONG UTF8StringMaxByteCount, - OUT PULONG UTF8StringActualByteCount, - IN PCWCH UnicodeStringSource, - IN ULONG UnicodeStringByteCount); + _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount) + PCHAR UTF8StringDestination, + _In_ ULONG UTF8StringMaxByteCount, + _Out_ PULONG UTF8StringActualByteCount, + _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource, + _In_ ULONG UnicodeStringByteCount); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTSYSAPI NTSTATUS NTAPI RtlUTF8ToUnicodeN( - OUT PWSTR UnicodeStringDestination, - IN ULONG UnicodeStringMaxByteCount, - OUT PULONG UnicodeStringActualByteCount, - IN PCCH UTF8StringSource, - IN ULONG UTF8StringByteCount); + _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount) + PWSTR UnicodeStringDestination, + _In_ ULONG UnicodeStringMaxByteCount, + _Out_ PULONG UnicodeStringActualByteCount, + _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource, + _In_ ULONG UTF8StringByteCount); NTSYSAPI ULONG64 @@ -9159,7 +9514,7 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlConvertLongToLargeInteger( - IN LONG SignedInteger) + _In_ LONG SignedInteger) { LARGE_INTEGER ret; ret.QuadPart = SignedInteger; @@ -9171,7 +9526,7 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlConvertUlongToLargeInteger( - IN ULONG UnsignedInteger) + _In_ ULONG UnsignedInteger) { LARGE_INTEGER ret; ret.QuadPart = UnsignedInteger; @@ -9183,8 +9538,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerShiftLeft( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) + _In_ LARGE_INTEGER LargeInteger, + _In_ CCHAR ShiftCount) { LARGE_INTEGER Result; @@ -9197,8 +9552,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerShiftRight( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) + _In_ LARGE_INTEGER LargeInteger, + _In_ CCHAR ShiftCount) { LARGE_INTEGER Result; @@ -9211,9 +9566,9 @@ static __inline ULONG NTAPI_INLINE RtlEnlargedUnsignedDivide( - IN ULARGE_INTEGER Dividend, - IN ULONG Divisor, - IN OUT PULONG Remainder) + _In_ ULARGE_INTEGER Dividend, + _In_ ULONG Divisor, + _Out_opt_ PULONG Remainder) { if (Remainder) *Remainder = (ULONG)(Dividend.QuadPart % Divisor); @@ -9225,7 +9580,7 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerNegate( - IN LARGE_INTEGER Subtrahend) + _In_ LARGE_INTEGER Subtrahend) { LARGE_INTEGER Difference; @@ -9238,8 +9593,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerSubtract( - IN LARGE_INTEGER Minuend, - IN LARGE_INTEGER Subtrahend) + _In_ LARGE_INTEGER Minuend, + _In_ LARGE_INTEGER Subtrahend) { LARGE_INTEGER Difference; @@ -9252,8 +9607,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlEnlargedUnsignedMultiply( - IN ULONG Multiplicand, - IN ULONG Multiplier) + _In_ ULONG Multiplicand, + _In_ ULONG Multiplier) { LARGE_INTEGER ret; ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; @@ -9265,36 +9620,44 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlEnlargedIntegerMultiply( - IN LONG Multiplicand, - IN LONG Multiplier) + _In_ LONG Multiplicand, + _In_ LONG Multiplier) { LARGE_INTEGER ret; ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; return ret; } +_At_(AnsiString->Buffer, _Post_equal_to_(Buffer)) +_At_(AnsiString->Length, _Post_equal_to_(0)) +_At_(AnsiString->MaximumLength, _Post_equal_to_(BufferSize)) FORCEINLINE VOID RtlInitEmptyAnsiString( - OUT PANSI_STRING AnsiString, - IN PCHAR Buffer, - IN USHORT BufferSize) + _Out_ PANSI_STRING AnsiString, + _Pre_maybenull_ _Pre_readable_size_(BufferSize) __drv_aliasesMem PCHAR Buffer, + _In_ USHORT BufferSize) { AnsiString->Length = 0; AnsiString->MaximumLength = BufferSize; AnsiString->Buffer = Buffer; } +_At_(UnicodeString->Buffer, _Post_equal_to_(Buffer)) +_At_(UnicodeString->Length, _Post_equal_to_(0)) +_At_(UnicodeString->MaximumLength, _Post_equal_to_(BufferSize)) FORCEINLINE VOID RtlInitEmptyUnicodeString( - OUT PUNICODE_STRING UnicodeString, - IN PWSTR Buffer, - IN USHORT BufferSize) + _Out_ PUNICODE_STRING UnicodeString, + _Writable_bytes_(BufferSize) + _When_(BufferSize != 0, _Notnull_) + __drv_aliasesMem PWSTR Buffer, + _In_ USHORT BufferSize) { - UnicodeString->Length = 0; - UnicodeString->MaximumLength = BufferSize; - UnicodeString->Buffer = Buffer; + UnicodeString->Length = 0; + UnicodeString->MaximumLength = BufferSize; + UnicodeString->Buffer = Buffer; } #if defined(_AMD64_) || defined(_IA64_) @@ -9304,8 +9667,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedIntegerMultiply( - IN LARGE_INTEGER Multiplicand, - IN LONG Multiplier) + _In_ LARGE_INTEGER Multiplicand, + _In_ LONG Multiplier) { LARGE_INTEGER ret; ret.QuadPart = Multiplicand.QuadPart * Multiplier; @@ -9316,9 +9679,9 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedLargeIntegerDivide( - IN LARGE_INTEGER Dividend, - IN ULONG Divisor, - OUT PULONG Remainder OPTIONAL) + _In_ LARGE_INTEGER Dividend, + _In_ ULONG Divisor, + _Out_opt_ PULONG Remainder) { LARGE_INTEGER ret; ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; @@ -9342,9 +9705,9 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlExtendedMagicDivide( - IN LARGE_INTEGER Dividend, - IN LARGE_INTEGER MagicDivisor, - IN CCHAR ShiftCount) + _In_ LARGE_INTEGER Dividend, + _In_ LARGE_INTEGER MagicDivisor, + _In_ CCHAR ShiftCount) { LARGE_INTEGER ret; ULONG64 ret64; @@ -9363,8 +9726,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerAdd( - IN LARGE_INTEGER Addend1, - IN LARGE_INTEGER Addend2) + _In_ LARGE_INTEGER Addend1, + _In_ LARGE_INTEGER Addend2) { LARGE_INTEGER ret; ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart; @@ -9385,8 +9748,8 @@ static __inline LARGE_INTEGER NTAPI_INLINE RtlLargeIntegerArithmeticShift( - IN LARGE_INTEGER LargeInteger, - IN CCHAR ShiftCount) + _In_ LARGE_INTEGER LargeInteger, + _In_ CCHAR ShiftCount) { LARGE_INTEGER ret; ret.QuadPart = LargeInteger.QuadPart >> ShiftCount; @@ -9404,8 +9767,8 @@ RtlLargeIntegerArithmeticShift( FORCEINLINE PVOID RtlSecureZeroMemory( - OUT PVOID Pointer, - IN SIZE_T Size) + _Out_writes_bytes_all_(Size) PVOID Pointer, + _In_ SIZE_T Size) { volatile char* vptr = (volatile char*)Pointer; #if defined(_M_AMD64) @@ -9420,11 +9783,12 @@ RtlSecureZeroMemory( } #if defined(_M_AMD64) +_Must_inspect_result_ FORCEINLINE BOOLEAN RtlCheckBit( - IN PRTL_BITMAP BitMapHeader, - IN ULONG BitPosition) + _In_ PRTL_BITMAP BitMapHeader, + _In_range_(<, BitMapHeader->SizeOfBitMap) ULONG BitPosition) { return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition); } @@ -9574,14 +9938,14 @@ RtlCheckBit( NTKERNELAPI VOID InitializeSListHead( - OUT PSLIST_HEADER SListHead); + _Out_ PSLIST_HEADER SListHead); #else FORCEINLINE VOID InitializeSListHead( - OUT PSLIST_HEADER SListHead) + _Out_ PSLIST_HEADER SListHead) { #if defined(_IA64_) ULONG64 FeatureBits; @@ -9624,14 +9988,14 @@ NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPopEntrySList( - IN PSLIST_HEADER ListHead); + _Inout_ PSLIST_HEADER ListHead); NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry); + _Inout_ PSLIST_HEADER ListHead, + _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry); #define InterlockedFlushSList(ListHead) \ ExInterlockedFlushSList(ListHead) @@ -9658,11 +10022,11 @@ InterlockedPushEntrySList( BOOLEAN RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)( - IN ULONG Version); + _In_ ULONG Version); BOOLEAN RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)( - IN ULONG Version); + _In_ ULONG Version); #ifndef RtlIsNtDdiVersionAvailable #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable @@ -9701,55 +10065,64 @@ NTKERNELAPI VOID NTAPI KeInitializeEvent( - OUT PRKEVENT Event, - IN EVENT_TYPE Type, - IN BOOLEAN State); + _Out_ PRKEVENT Event, + _In_ EVENT_TYPE Type, + _In_ BOOLEAN State); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeClearEvent( - IN OUT PRKEVENT Event); + _Inout_ PRKEVENT Event); #if (NTDDI_VERSION >= NTDDI_WIN2K) #if defined(_NTDDK_) || defined(_NTIFS_) +_Maybe_raises_SEH_exception_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ProbeForRead( - IN CONST VOID *Address, /* CONST is added */ - IN SIZE_T Length, - IN ULONG Alignment); + __in_data_source(USER_MODE) _In_reads_bytes_(Length) CONST VOID *Address, /* CONST is added */ + _In_ SIZE_T Length, + _In_ ULONG Alignment); #endif /* defined(_NTDDK_) || defined(_NTIFS_) */ +_Maybe_raises_SEH_exception_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ProbeForWrite( - IN PVOID Address, - IN SIZE_T Length, - IN ULONG Alignment); + __in_data_source(USER_MODE) _Inout_updates_bytes_(Length) PVOID Address, + _In_ SIZE_T Length, + _In_ ULONG Alignment); #if defined(SINGLE_GROUP_LEGACY_API) +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeRevertToUserAffinityThread(VOID); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeSetSystemAffinityThread( - IN KAFFINITY Affinity); + _In_ KAFFINITY Affinity); NTKERNELAPI VOID NTAPI KeSetTargetProcessorDpc( - IN OUT PRKDPC Dpc, - IN CCHAR Number); + _Inout_ PRKDPC Dpc, + _In_ CCHAR Number); NTKERNELAPI KAFFINITY @@ -9767,37 +10140,51 @@ NTKERNELAPI VOID NTAPI KeQuerySystemTime( - OUT PLARGE_INTEGER CurrentTime); + _Out_ PLARGE_INTEGER CurrentTime); #endif /* !_M_AMD64 */ #if !defined(_X86_) && !defined(_M_ARM) +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_ +_IRQL_raises_(DISPATCH_LEVEL) NTKERNELAPI KIRQL NTAPI KeAcquireSpinLockRaiseToDpc( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); #define KeAcquireSpinLock(SpinLock, OldIrql) \ *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); +_Requires_lock_held_(*SpinLock) +_Releases_lock_(*SpinLock) +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeReleaseSpinLock( - IN OUT PKSPIN_LOCK SpinLock, - IN KIRQL NewIrql); + _Inout_ PKSPIN_LOCK SpinLock, + _In_ _IRQL_restores_ KIRQL NewIrql); +_Requires_lock_held_(*SpinLock) +_Releases_lock_(*SpinLock) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeReleaseSpinLockFromDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); #endif /* !_X86_ */ #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK)) @@ -9805,11 +10192,11 @@ NTKERNELAPI VOID NTAPI KeInitializeSpinLock( - IN PKSPIN_LOCK SpinLock); + _Out_ PKSPIN_LOCK SpinLock); #else FORCEINLINE VOID -KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) +KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock) { /* Clear the lock */ *SpinLock = 0; @@ -9821,102 +10208,116 @@ NTKERNELAPI VOID NTAPI KeBugCheckEx( - IN ULONG BugCheckCode, - IN ULONG_PTR BugCheckParameter1, - IN ULONG_PTR BugCheckParameter2, - IN ULONG_PTR BugCheckParameter3, - IN ULONG_PTR BugCheckParameter4); + _In_ ULONG BugCheckCode, + _In_ ULONG_PTR BugCheckParameter1, + _In_ ULONG_PTR BugCheckParameter2, + _In_ ULONG_PTR BugCheckParameter3, + _In_ ULONG_PTR BugCheckParameter4); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeCancelTimer( - IN OUT PKTIMER); + _Inout_ PKTIMER); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeDelayExecutionThread( - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Interval); + _In_ KPROCESSOR_MODE WaitMode, + _In_ BOOLEAN Alertable, + _In_ PLARGE_INTEGER Interval); +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI KeDeregisterBugCheckCallback( - IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord); + _Inout_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord); +_Acquires_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterCriticalRegion(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeInitializeDeviceQueue( - OUT PKDEVICE_QUEUE DeviceQueue); + _Out_ PKDEVICE_QUEUE DeviceQueue); NTKERNELAPI VOID NTAPI KeInitializeDpc( - OUT PRKDPC Dpc, - IN PKDEFERRED_ROUTINE DeferredRoutine, - IN PVOID DeferredContext OPTIONAL); + _Out_ __drv_aliasesMem PRKDPC Dpc, + _In_ PKDEFERRED_ROUTINE DeferredRoutine, + _In_opt_ __drv_aliasesMem PVOID DeferredContext); NTKERNELAPI VOID NTAPI KeInitializeMutex( - OUT PRKMUTEX Mutex, - IN ULONG Level); + _Out_ PRKMUTEX Mutex, + _In_ ULONG Level); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI KeInitializeSemaphore( - OUT PRKSEMAPHORE Semaphore, - IN LONG Count, - IN LONG Limit); + _Out_ PRKSEMAPHORE Semaphore, + _In_ LONG Count, + _In_ LONG Limit); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeInitializeTimer( - OUT PKTIMER Timer); + _Out_ PKTIMER Timer); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI KeInitializeTimerEx( - OUT PKTIMER Timer, - IN TIMER_TYPE Type); + _Out_ PKTIMER Timer, + _In_ TIMER_TYPE Type); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeInsertByKeyDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, - IN ULONG SortKey); + _Inout_ PKDEVICE_QUEUE DeviceQueue, + _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, + _In_ ULONG SortKey); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeInsertDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); + _Inout_ PKDEVICE_QUEUE DeviceQueue, + _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); NTKERNELAPI BOOLEAN NTAPI KeInsertQueueDpc( - IN OUT PRKDPC Dpc, - IN PVOID SystemArgument1 OPTIONAL, - IN PVOID SystemArgument2 OPTIONAL); + _Inout_ PRKDPC Dpc, + _In_opt_ PVOID SystemArgument1, + _In_opt_ PVOID SystemArgument2); +_Releases_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI @@ -9926,203 +10327,248 @@ NTHALAPI LARGE_INTEGER NTAPI KeQueryPerformanceCounter( - OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL); + _Out_opt_ PLARGE_INTEGER PerformanceFrequency); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI KPRIORITY NTAPI KeQueryPriorityThread( - IN PRKTHREAD Thread); + _In_ PRKTHREAD Thread); NTKERNELAPI ULONG NTAPI KeQueryTimeIncrement(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeReadStateEvent( - IN PRKEVENT Event); + _In_ PRKEVENT Event); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeReadStateMutex( - IN PRKMUTEX Mutex); + _In_ PRKMUTEX Mutex); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeReadStateSemaphore( - IN PRKSEMAPHORE Semaphore); + _In_ PRKSEMAPHORE Semaphore); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeReadStateTimer( - IN PKTIMER Timer); + _In_ PKTIMER Timer); +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI KeRegisterBugCheckCallback( - OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord, - IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, - IN PVOID Buffer, - IN ULONG Length, - IN PUCHAR Component); + _Out_ PKBUGCHECK_CALLBACK_RECORD CallbackRecord, + _In_ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, + _In_reads_bytes_opt_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_ PUCHAR Component); +_When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI LONG NTAPI KeReleaseMutex( - IN OUT PRKMUTEX Mutex, - IN BOOLEAN Wait); + _Inout_ PRKMUTEX Mutex, + _In_ BOOLEAN Wait); +_When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI LONG NTAPI KeReleaseSemaphore( - IN OUT PRKSEMAPHORE Semaphore, - IN KPRIORITY Increment, - IN LONG Adjustment, - IN BOOLEAN Wait); + _Inout_ PRKSEMAPHORE Semaphore, + _In_ KPRIORITY Increment, + _In_ LONG Adjustment, + _In_ _Literal_ BOOLEAN Wait); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN ULONG SortKey); + _Inout_ PKDEVICE_QUEUE DeviceQueue, + _In_ ULONG SortKey); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue); + _Inout_ PKDEVICE_QUEUE DeviceQueue); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeRemoveEntryDeviceQueue( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); + _Inout_ PKDEVICE_QUEUE DeviceQueue, + _Inout_ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); +_IRQL_requires_max_(HIGH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeRemoveQueueDpc( - IN OUT PRKDPC Dpc); + _Inout_ PRKDPC Dpc); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG NTAPI KeResetEvent( - IN OUT PRKEVENT Event); + _Inout_ PRKEVENT Event); +_When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(Wait==1, _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI LONG NTAPI KeSetEvent( - IN OUT PRKEVENT Event, - IN KPRIORITY Increment, - IN BOOLEAN Wait); + _Inout_ PRKEVENT Event, + _In_ KPRIORITY Increment, + _In_ _Literal_ BOOLEAN Wait); NTKERNELAPI VOID NTAPI KeSetImportanceDpc( - IN OUT PRKDPC Dpc, - IN KDPC_IMPORTANCE Importance); + _Inout_ PRKDPC Dpc, + _In_ KDPC_IMPORTANCE Importance); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI KPRIORITY NTAPI KeSetPriorityThread( - IN OUT PKTHREAD Thread, - IN KPRIORITY Priority); + _Inout_ PKTHREAD Thread, + _In_ KPRIORITY Priority); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeSetTimer( - IN OUT PKTIMER Timer, - IN LARGE_INTEGER DueTime, - IN PKDPC Dpc OPTIONAL); + _Inout_ PKTIMER Timer, + _In_ LARGE_INTEGER DueTime, + _In_opt_ PKDPC Dpc); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeSetTimerEx( - IN OUT PKTIMER Timer, - IN LARGE_INTEGER DueTime, - IN LONG Period OPTIONAL, - IN PKDPC Dpc OPTIONAL); + _Inout_ PKTIMER Timer, + _In_ LARGE_INTEGER DueTime, + _In_ LONG Period OPTIONAL, + _In_opt_ PKDPC Dpc); NTHALAPI VOID NTAPI KeStallExecutionProcessor( - IN ULONG MicroSeconds); + _In_ ULONG MicroSeconds); +_IRQL_requires_max_(HIGH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeSynchronizeExecution( - IN OUT PKINTERRUPT Interrupt, - IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, - IN PVOID SynchronizeContext OPTIONAL); + _Inout_ PKINTERRUPT Interrupt, + _In_ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, + _In_opt_ __drv_aliasesMem PVOID SynchronizeContext); +_IRQL_requires_min_(PASSIVE_LEVEL) +_When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) +_When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) NTKERNELAPI NTSTATUS NTAPI KeWaitForMultipleObjects( - IN ULONG Count, - IN PVOID Object[], - IN WAIT_TYPE WaitType, - IN KWAIT_REASON WaitReason, - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL, - OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL); + _In_ ULONG Count, + _In_reads_(Count) PVOID Object[], + _In_ __drv_strictTypeMatch(__drv_typeConst) WAIT_TYPE WaitType, + _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, + _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, + _In_ BOOLEAN Alertable, + _In_opt_ PLARGE_INTEGER Timeout, + _Out_opt_ PKWAIT_BLOCK WaitBlockArray); #define KeWaitForMutexObject KeWaitForSingleObject +_IRQL_requires_min_(PASSIVE_LEVEL) +_When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL)) +_When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL)) NTKERNELAPI NTSTATUS NTAPI KeWaitForSingleObject( - IN PVOID Object, - IN KWAIT_REASON WaitReason, - IN KPROCESSOR_MODE WaitMode, - IN BOOLEAN Alertable, - IN PLARGE_INTEGER Timeout OPTIONAL); + _In_ _Points_to_data_ PVOID Object, + _In_ __drv_strictTypeMatch(__drv_typeCond) KWAIT_REASON WaitReason, + _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) KPROCESSOR_MODE WaitMode, + _In_ BOOLEAN Alertable, + _In_opt_ PLARGE_INTEGER Timeout); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_Requires_lock_not_held_(*LockHandle) +_Acquires_lock_(*LockHandle) +_Post_same_lock_(*SpinLock, *LockHandle) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_global_(QueuedSpinLock,LockHandle) +_IRQL_raises_(DISPATCH_LEVEL) _DECL_HAL_KE_IMPORT VOID FASTCALL KeAcquireInStackQueuedSpinLock( - IN OUT PKSPIN_LOCK SpinLock, - OUT PKLOCK_QUEUE_HANDLE LockHandle); + _Inout_ PKSPIN_LOCK SpinLock, + _Out_ PKLOCK_QUEUE_HANDLE LockHandle); +_Requires_lock_not_held_(*LockHandle) +_Acquires_lock_(*LockHandle) +_Post_same_lock_(*SpinLock, *LockHandle) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL KeAcquireInStackQueuedSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock, - OUT PKLOCK_QUEUE_HANDLE LockHandle); + _Inout_ PKSPIN_LOCK SpinLock, + _Out_ PKLOCK_QUEUE_HANDLE LockHandle); +_Requires_lock_not_held_(*Interrupt->ActualLock) +_Acquires_lock_(*Interrupt->ActualLock) +_IRQL_requires_max_(HIGH_LEVEL) +_IRQL_saves_ +_IRQL_raises_(HIGH_LEVEL) NTKERNELAPI KIRQL NTAPI KeAcquireInterruptSpinLock( - IN OUT PKINTERRUPT Interrupt); + _Inout_ PKINTERRUPT Interrupt); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI @@ -10133,61 +10579,76 @@ ULONG NTAPI KeGetRecommendedSharedDataAlignment(VOID); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI ULONG NTAPI KeQueryRuntimeThread( - IN PKTHREAD Thread, - OUT PULONG UserTime); + _In_ PKTHREAD Thread, + _Out_ PULONG UserTime); +_Requires_lock_held_(*LockHandle) +_Releases_lock_(*LockHandle) +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL KeReleaseInStackQueuedSpinLockFromDpcLevel( - IN PKLOCK_QUEUE_HANDLE LockHandle); + _In_ PKLOCK_QUEUE_HANDLE LockHandle); +_Requires_lock_held_(*Interrupt->ActualLock) +_Releases_lock_(*Interrupt->ActualLock) +_IRQL_requires_(HIGH_LEVEL) NTKERNELAPI VOID NTAPI KeReleaseInterruptSpinLock( - IN OUT PKINTERRUPT Interrupt, - IN KIRQL OldIrql); + _Inout_ PKINTERRUPT Interrupt, + _In_ _IRQL_restores_ KIRQL OldIrql); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueueIfBusy( - IN OUT PKDEVICE_QUEUE DeviceQueue, - IN ULONG SortKey); + _Inout_ PKDEVICE_QUEUE DeviceQueue, + _In_ ULONG SortKey); +_Requires_lock_held_(*LockHandle) +_Releases_lock_(*LockHandle) +_IRQL_requires_(DISPATCH_LEVEL) +_IRQL_restores_global_(QueuedSpinLock,LockHandle) _DECL_HAL_KE_IMPORT VOID FASTCALL KeReleaseInStackQueuedSpinLock( - IN PKLOCK_QUEUE_HANDLE LockHandle); + _In_ PKLOCK_QUEUE_HANDLE LockHandle); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WINXPSP1) +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI KeDeregisterBugCheckReasonCallback( - IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord); + _Inout_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord); +_Must_inspect_result_ NTKERNELAPI BOOLEAN NTAPI KeRegisterBugCheckReasonCallback( - OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, - IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, - IN KBUGCHECK_CALLBACK_REASON Reason, - IN PUCHAR Component); + _Out_ PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, + _In_ PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, + _In_ KBUGCHECK_CALLBACK_REASON Reason, + _In_ PUCHAR Component); #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */ #if (NTDDI_VERSION >= NTDDI_WINXPSP2) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI @@ -10195,152 +10656,212 @@ KeFlushQueuedDpcs(VOID); #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ #if (NTDDI_VERSION >= NTDDI_WS03) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI KeRegisterNmiCallback( - IN PNMI_CALLBACK CallbackRoutine, - IN PVOID Context OPTIONAL); + _In_ PNMI_CALLBACK CallbackRoutine, + _In_opt_ PVOID Context); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeDeregisterNmiCallback( - IN PVOID Handle); + _In_ PVOID Handle); NTKERNELAPI VOID NTAPI KeInitializeThreadedDpc( - OUT PRKDPC Dpc, - IN PKDEFERRED_ROUTINE DeferredRoutine, - IN PVOID DeferredContext OPTIONAL); + _Out_ PRKDPC Dpc, + _In_ PKDEFERRED_ROUTINE DeferredRoutine, + _In_opt_ PVOID DeferredContext); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(IPI_LEVEL-1) NTKERNELAPI ULONG_PTR NTAPI KeIpiGenericCall( - IN PKIPI_BROADCAST_WORKER BroadcastFunction, - IN ULONG_PTR Context); + _In_ PKIPI_BROADCAST_WORKER BroadcastFunction, + _In_ ULONG_PTR Context); +_Requires_lock_not_held_(*SpinLock) +_Acquires_lock_(*SpinLock) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_ NTKERNELAPI KIRQL FASTCALL KeAcquireSpinLockForDpc( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ PKSPIN_LOCK SpinLock); +_Requires_lock_held_(*SpinLock) +_Releases_lock_(*SpinLock) +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL KeReleaseSpinLockForDpc( - IN OUT PKSPIN_LOCK SpinLock, - IN KIRQL OldIrql); + _Inout_ PKSPIN_LOCK SpinLock, + _In_ _IRQL_restores_ KIRQL OldIrql); +_Must_inspect_result_ NTKERNELAPI BOOLEAN FASTCALL KeTestSpinLock( - IN PKSPIN_LOCK SpinLock); + _In_ PKSPIN_LOCK SpinLock); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_Must_inspect_result_ +_IRQL_requires_min_(DISPATCH_LEVEL) +_Post_satisfies_(return == 1 || return == 0) NTKERNELAPI BOOLEAN FASTCALL KeTryToAcquireSpinLockAtDpcLevel( - IN OUT PKSPIN_LOCK SpinLock); + _Inout_ _Requires_lock_not_held_(*_Curr_) + _When_(return!=0, _Acquires_lock_(*_Curr_)) + PKSPIN_LOCK SpinLock); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeAreAllApcsDisabled(VOID); +_Acquires_lock_(_Global_critical_region_) +_Requires_lock_not_held_(*Mutex) +_Acquires_lock_(*Mutex) +_IRQL_requires_max_(APC_LEVEL) +_IRQL_requires_min_(PASSIVE_LEVEL) NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + _Inout_ PKGUARDED_MUTEX GuardedMutex); +_Requires_lock_not_held_(*FastMutex) +_Acquires_lock_(*FastMutex) +_IRQL_requires_max_(APC_LEVEL) +_IRQL_requires_min_(PASSIVE_LEVEL) NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex); + _Inout_ PKGUARDED_MUTEX GuardedMutex); +_Acquires_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeEnterGuardedRegion(VOID); +_Releases_lock_(_Global_critical_region_) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeLeaveGuardedRegion(VOID); +_IRQL_requires_max_(APC_LEVEL) +_IRQL_requires_min_(PASSIVE_LEVEL) NTKERNELAPI VOID FASTCALL KeInitializeGuardedMutex( - OUT PKGUARDED_MUTEX GuardedMutex); + _Out_ PKGUARDED_MUTEX GuardedMutex); +_Requires_lock_held_(*FastMutex) +_Releases_lock_(*FastMutex) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutexUnsafe( - IN OUT PKGUARDED_MUTEX GuardedMutex); + _Inout_ PKGUARDED_MUTEX GuardedMutex); +_Releases_lock_(_Global_critical_region_) +_Requires_lock_held_(*Mutex) +_Releases_lock_(*Mutex) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + _Inout_ PKGUARDED_MUTEX GuardedMutex); +_Must_inspect_result_ +_Success_(return != FALSE) +_IRQL_requires_max_(APC_LEVEL) +_Post_satisfies_(return == 1 || return == 0) NTKERNELAPI BOOLEAN FASTCALL KeTryToAcquireGuardedMutex( - IN OUT PKGUARDED_MUTEX GuardedMutex); + _When_ (return, _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)) _Acquires_lock_(_Global_critical_region_) + _Inout_ PKGUARDED_MUTEX GuardedMutex); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_Requires_lock_not_held_(*LockHandle) +_Acquires_lock_(*LockHandle) +_Post_same_lock_(*SpinLock, *LockHandle) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_saves_global_(QueuedSpinLock,LockHandle) NTKERNELAPI VOID FASTCALL KeAcquireInStackQueuedSpinLockForDpc( - IN OUT PKSPIN_LOCK SpinLock, - OUT PKLOCK_QUEUE_HANDLE LockHandle); + _Inout_ PKSPIN_LOCK SpinLock, + _Out_ PKLOCK_QUEUE_HANDLE LockHandle); +_Requires_lock_held_(*LockHandle) +_Releases_lock_(*LockHandle) +_IRQL_requires_(DISPATCH_LEVEL) +_IRQL_restores_global_(QueuedSpinLock,LockHandle) NTKERNELAPI VOID FASTCALL KeReleaseInStackQueuedSpinLockForDpc( - IN PKLOCK_QUEUE_HANDLE LockHandle); + _In_ PKLOCK_QUEUE_HANDLE LockHandle); +_IRQL_requires_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryDpcWatchdogInformation( - OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation); + _Out_ PKDPC_WATCHDOG_INFORMATION WatchdogInformation); #if defined(SINGLE_GROUP_LEGACY_API) +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI KAFFINITY NTAPI KeSetSystemAffinityThreadEx( - IN KAFFINITY Affinity); + _In_ KAFFINITY Affinity); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeRevertToUserAffinityThreadEx( - IN KAFFINITY Affinity); + _In_ KAFFINITY Affinity); NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCount( - OUT PKAFFINITY ActiveProcessors OPTIONAL); + _Out_opt_ PKAFFINITY ActiveProcessors); NTKERNELAPI ULONG @@ -10352,62 +10873,76 @@ KeQueryMaximumProcessorCount(VOID); #if (NTDDI_VERSION >= NTDDI_WS08) +_IRQL_requires_max_(APC_LEVEL) PVOID NTAPI KeRegisterProcessorChangeCallback( - IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction, - IN PVOID CallbackContext OPTIONAL, - IN ULONG Flags); + _In_ PPROCESSOR_CALLBACK_FUNCTION CallbackFunction, + _In_opt_ PVOID CallbackContext, + _In_ ULONG Flags); +_IRQL_requires_max_(APC_LEVEL) VOID NTAPI KeDeregisterProcessorChangeCallback( - IN PVOID CallbackHandle); + _In_ PVOID CallbackHandle); #endif /* (NTDDI_VERSION >= NTDDI_WS08) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_same_ ULONG64 NTAPI KeQueryTotalCycleTimeProcess( - IN OUT PKPROCESS Process, - OUT PULONG64 CycleTimeStamp); + _Inout_ PKPROCESS Process, + _Out_ PULONG64 CycleTimeStamp); +_IRQL_requires_max_(APC_LEVEL) +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_same_ ULONG64 NTAPI KeQueryTotalCycleTimeThread( - IN OUT PKTHREAD Thread, - OUT PULONG64 CycleTimeStamp); + _Inout_ PKTHREAD Thread, + _Out_ PULONG64 CycleTimeStamp); +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI KeSetTargetProcessorDpcEx( - IN OUT PKDPC Dpc, - IN PPROCESSOR_NUMBER ProcNumber); + _Inout_ PKDPC Dpc, + _In_ PPROCESSOR_NUMBER ProcNumber); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeSetSystemGroupAffinityThread( - IN PGROUP_AFFINITY Affinity, - OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL); + _In_ PGROUP_AFFINITY Affinity, + _Out_opt_ PGROUP_AFFINITY PreviousAffinity); +_IRQL_requires_min_(PASSIVE_LEVEL) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI KeRevertToUserGroupAffinityThread( - IN PGROUP_AFFINITY PreviousAffinity); + _In_ PGROUP_AFFINITY PreviousAffinity); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI KeSetCoalescableTimer( - IN OUT PKTIMER Timer, - IN LARGE_INTEGER DueTime, - IN ULONG Period, - IN ULONG TolerableDelay, - IN PKDPC Dpc OPTIONAL); + _Inout_ PKTIMER Timer, + _In_ LARGE_INTEGER DueTime, + _In_ ULONG Period, + _In_ ULONG TolerableDelay, + _In_opt_ PKDPC Dpc); NTKERNELAPI ULONGLONG @@ -10418,13 +10953,13 @@ NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCountEx( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCountEx( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI USHORT @@ -10440,27 +10975,27 @@ NTKERNELAPI KAFFINITY NTAPI KeQueryGroupAffinity( - IN USHORT GroupNumber); + _In_ USHORT GroupNumber); NTKERNELAPI ULONG NTAPI KeGetCurrentProcessorNumberEx( - OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL); + _Out_opt_ PPROCESSOR_NUMBER ProcNumber); NTKERNELAPI VOID NTAPI KeQueryNodeActiveAffinity( - IN USHORT NodeNumber, - OUT PGROUP_AFFINITY Affinity OPTIONAL, - OUT PUSHORT Count OPTIONAL); + _In_ USHORT NodeNumber, + _Out_opt_ PGROUP_AFFINITY Affinity, + _Out_opt_ PUSHORT Count); NTKERNELAPI USHORT NTAPI KeQueryNodeMaximumProcessorCount( - IN USHORT NodeNumber); + _In_ USHORT NodeNumber); NTKERNELAPI USHORT @@ -10472,38 +11007,47 @@ USHORT NTAPI KeGetCurrentNodeNumber(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI KeQueryLogicalProcessorRelationship( - IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, - IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, - OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL, - IN OUT PULONG Length); + _In_opt_ PPROCESSOR_NUMBER ProcessorNumber OPTIONAL, + _In_ LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType, + _Out_writes_bytes_opt_(*Length) PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information, + _Inout_ PULONG Length); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_Ret_range_(<=, 0) +_When_(return==0, _Kernel_float_saved_) NTKERNELAPI NTSTATUS NTAPI KeSaveExtendedProcessorState( - IN ULONG64 Mask, - OUT PXSTATE_SAVE XStateSave); + _In_ ULONG64 Mask, + _Out_ _Requires_lock_not_held_(*_Curr_) + _When_(return==0, _Acquires_lock_(*_Curr_)) + PXSTATE_SAVE XStateSave); +_Kernel_float_restored_ NTKERNELAPI VOID NTAPI KeRestoreExtendedProcessorState( - IN PXSTATE_SAVE XStateSave); + _In_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) + PXSTATE_SAVE XStateSave); NTSTATUS NTAPI KeGetProcessorNumberFromIndex( - IN ULONG ProcIndex, - OUT PPROCESSOR_NUMBER ProcNumber); + _In_ ULONG ProcIndex, + _Out_ PPROCESSOR_NUMBER ProcNumber); ULONG NTAPI KeGetProcessorIndexFromNumber( - IN PPROCESSOR_NUMBER ProcNumber); + _In_ PPROCESSOR_NUMBER ProcNumber); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #if !defined(_IA64_) NTHALAPI @@ -10519,7 +11063,14 @@ KeFlushWriteBuffer(VOID); #define KeInitializeCallbackRecord(CallbackRecord) \ CallbackRecord->State = BufferEmpty; -#if DBG +#if defined(_PREFAST_) + +void __PREfastPagedCode(void); +void __PREfastPagedCodeLocked(void); +#define PAGED_CODE() __PREfastPagedCode(); +#define PAGED_CODE_LOCKED() __PREfastPagedCodeLocked(); + +#elif DBG #if (NTDDI_VERSION >= NTDDI_VISTA) #define PAGED_ASSERT( exp ) NT_ASSERT( exp ) @@ -10534,14 +11085,15 @@ KeFlushWriteBuffer(VOID); } \ } +#define PAGED_CODE_LOCKED() NOP_FUNCTION; + #else -#define PAGED_CODE() +#define PAGED_CODE() NOP_FUNCTION; +#define PAGED_CODE_LOCKED() NOP_FUNCTION; #endif /* DBG */ -#define PAGED_CODE_LOCKED() NOP_FUNCTION; - /****************************************************************************** * Memory manager Functions * ******************************************************************************/ @@ -10720,280 +11272,344 @@ KeFlushWriteBuffer(VOID); } #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS HighestAcceptableAddress); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCache( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, + _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, + _In_ MEMORY_CACHING_TYPE CacheType); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PMDL NTAPI MmAllocatePagesForMdl( - IN PHYSICAL_ADDRESS LowAddress, - IN PHYSICAL_ADDRESS HighAddress, - IN PHYSICAL_ADDRESS SkipBytes, - IN SIZE_T TotalBytes); + _In_ PHYSICAL_ADDRESS LowAddress, + _In_ PHYSICAL_ADDRESS HighAddress, + _In_ PHYSICAL_ADDRESS SkipBytes, + _In_ SIZE_T TotalBytes); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmBuildMdlForNonPagedPool( - IN OUT PMDLX MemoryDescriptorList); + _Inout_ PMDLX MemoryDescriptorList); //DECLSPEC_DEPRECATED_DDK NTKERNELAPI PMDL NTAPI MmCreateMdl( - IN PMDL MemoryDescriptorList OPTIONAL, - IN PVOID Base, - IN SIZE_T Length); + _Out_writes_bytes_opt_ (sizeof (MDL) + (sizeof (PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES (Base, Length))) + PMDL MemoryDescriptorList, + _In_reads_bytes_opt_ (Length) PVOID Base, + _In_ SIZE_T Length); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmFreeContiguousMemory( - IN PVOID BaseAddress); + _In_ PVOID BaseAddress); +_IRQL_requires_max_ (DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmFreeContiguousMemorySpecifyCache( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheType); + _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes, + _In_ MEMORY_CACHING_TYPE CacheType); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmFreePagesFromMdl( - IN PMDLX MemoryDescriptorList); + _Inout_ PMDLX MemoryDescriptorList); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PVOID NTAPI MmGetSystemRoutineAddress( - IN PUNICODE_STRING SystemRoutineName); + _In_ PUNICODE_STRING SystemRoutineName); NTKERNELAPI LOGICAL NTAPI MmIsDriverVerifying( - IN struct _DRIVER_OBJECT *DriverObject); + _In_ struct _DRIVER_OBJECT *DriverObject); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI MmLockPagableDataSection( - IN PVOID AddressWithinSection); + _In_ PVOID AddressWithinSection); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_Out_writes_bytes_opt_ (NumberOfBytes) NTKERNELAPI PVOID NTAPI MmMapIoSpace( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN SIZE_T NumberOfBytes, - IN MEMORY_CACHING_TYPE CacheEnable); + _In_ PHYSICAL_ADDRESS PhysicalAddress, + _In_ SIZE_T NumberOfBytes, + _In_ MEMORY_CACHING_TYPE CacheType); +_Must_inspect_result_ +_When_(AccessMode==0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(AccessMode==1, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL)) NTKERNELAPI PVOID NTAPI MmMapLockedPages( - IN PMDL MemoryDescriptorList, - IN KPROCESSOR_MODE AccessMode); + _Inout_ PMDL MemoryDescriptorList, + _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) + KPROCESSOR_MODE AccessMode); +_Post_writable_byte_size_(MemoryDescriptorList->ByteCount) +_When_(AccessMode==KernelMode, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_(AccessMode==UserMode, _Maybe_raises_SEH_exception_ _IRQL_requires_max_(APC_LEVEL) _Post_notnull_) +_At_(MemoryDescriptorList->MappedSystemVa, _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)) +_Must_inspect_result_ +_Success_(return != NULL) NTKERNELAPI PVOID NTAPI MmMapLockedPagesSpecifyCache( - IN PMDLX MemoryDescriptorList, - IN KPROCESSOR_MODE AccessMode, - IN MEMORY_CACHING_TYPE CacheType, - IN PVOID BaseAddress OPTIONAL, - IN ULONG BugCheckOnFailure, - IN MM_PAGE_PRIORITY Priority); + _Inout_ PMDLX MemoryDescriptorList, + _In_ __drv_strictType(KPROCESSOR_MODE/enum _MODE,__drv_typeConst) + KPROCESSOR_MODE AccessMode, + _In_ __drv_strictTypeMatch(__drv_typeCond) MEMORY_CACHING_TYPE CacheType, + _In_opt_ PVOID BaseAddress, + _In_ ULONG BugCheckOnFailure, + _In_ MM_PAGE_PRIORITY Priority); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI MmPageEntireDriver( - IN PVOID AddressWithinSection); + _In_ PVOID AddressWithinSection); +_IRQL_requires_max_(DISPATCH_LEVEL) +_At_(MemoryDescriptorList->StartVa + MemoryDescriptorList->ByteOffset, + _Field_size_bytes_opt_(MemoryDescriptorList->ByteCount)) NTKERNELAPI VOID NTAPI MmProbeAndLockPages( - IN OUT PMDL MemoryDescriptorList, - IN KPROCESSOR_MODE AccessMode, - IN LOCK_OPERATION Operation); + _Inout_ PMDLX MemoryDescriptorList, + _In_ KPROCESSOR_MODE AccessMode, + _In_ LOCK_OPERATION Operation); NTKERNELAPI MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmResetDriverPaging( - IN PVOID AddressWithinSection); + _In_ PVOID AddressWithinSection); NTKERNELAPI SIZE_T NTAPI MmSizeOfMdl( - IN PVOID Base, - IN SIZE_T Length); + _In_reads_bytes_opt_ (Length) PVOID Base, + _In_ SIZE_T Length); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmUnlockPagableImageSection( - IN PVOID ImageSectionHandle); + _In_ PVOID ImageSectionHandle); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmUnlockPages( - IN OUT PMDL MemoryDescriptorList); + _Inout_ PMDLX MemoryDescriptorList); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmUnmapIoSpace( - IN PVOID BaseAddress, - IN SIZE_T NumberOfBytes); + _In_reads_bytes_ (NumberOfBytes) PVOID BaseAddress, + _In_ SIZE_T NumberOfBytes); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI VOID NTAPI MmProbeAndLockProcessPages( - IN OUT PMDL MemoryDescriptorList, - IN PEPROCESS Process, - IN KPROCESSOR_MODE AccessMode, - IN LOCK_OPERATION Operation); + _Inout_ PMDL MemoryDescriptorList, + _In_ PEPROCESS Process, + _In_ KPROCESSOR_MODE AccessMode, + _In_ LOCK_OPERATION Operation); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmUnmapLockedPages( - IN PVOID BaseAddress, - IN PMDL MemoryDescriptorList); + _In_ PVOID BaseAddress, + _Inout_ PMDL MemoryDescriptorList); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_When_ (return != NULL, _Post_writable_byte_size_ (NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCacheNode( - IN SIZE_T NumberOfBytes, - IN PHYSICAL_ADDRESS LowestAcceptableAddress, - IN PHYSICAL_ADDRESS HighestAcceptableAddress, - IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, - IN MEMORY_CACHING_TYPE CacheType, - IN NODE_REQUIREMENT PreferredNode); + _In_ SIZE_T NumberOfBytes, + _In_ PHYSICAL_ADDRESS LowestAcceptableAddress, + _In_ PHYSICAL_ADDRESS HighestAcceptableAddress, + _In_opt_ PHYSICAL_ADDRESS BoundaryAddressMultiple, + _In_ MEMORY_CACHING_TYPE CacheType, + _In_ NODE_REQUIREMENT PreferredNode); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmAdvanceMdl( - IN OUT PMDL Mdl, - IN ULONG NumberOfBytes); + _Inout_ PMDLX Mdl, + _In_ ULONG NumberOfBytes); +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) +_When_ (return != NULL, _Out_writes_bytes_opt_ (NumberOfBytes)) NTKERNELAPI PVOID NTAPI MmAllocateMappingAddress( - IN SIZE_T NumberOfBytes, - IN ULONG PoolTag); + _In_ SIZE_T NumberOfBytes, + _In_ ULONG PoolTag); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI MmFreeMappingAddress( - IN PVOID BaseAddress, - IN ULONG PoolTag); + _In_ PVOID BaseAddress, + _In_ ULONG PoolTag); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmIsVerifierEnabled( - OUT PULONG VerifierFlags); + _Out_ PULONG VerifierFlags); +_Post_writable_byte_size_(MemoryDescriptorList->ByteCount) +_IRQL_requires_max_(DISPATCH_LEVEL) +_At_(MemoryDescriptorList->MappedSystemVa + MemoryDescriptorList->ByteOffset, + _Post_writable_byte_size_(MemoryDescriptorList->ByteCount)) +_Must_inspect_result_ +_Success_(return != NULL) NTKERNELAPI PVOID NTAPI MmMapLockedPagesWithReservedMapping( - IN PVOID MappingAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList, - IN MEMORY_CACHING_TYPE CacheType); + _In_ PVOID MappingAddress, + _In_ ULONG PoolTag, + _Inout_ PMDLX MemoryDescriptorList, + _In_ __drv_strictTypeMatch(__drv_typeCond) + MEMORY_CACHING_TYPE CacheType); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmProtectMdlSystemAddress( - IN PMDL MemoryDescriptorList, - IN ULONG NewProtect); + _In_ PMDLX MemoryDescriptorList, + _In_ ULONG NewProtect); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI MmUnmapReservedMapping( - IN PVOID BaseAddress, - IN ULONG PoolTag, - IN PMDL MemoryDescriptorList); + _In_ PVOID BaseAddress, + _In_ ULONG PoolTag, + _Inout_ PMDLX MemoryDescriptorList); +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI MmAddVerifierThunks( - IN PVOID ThunkBuffer, - IN ULONG ThunkBufferSize); + _In_reads_bytes_ (ThunkBufferSize) PVOID ThunkBuffer, + _In_ ULONG ThunkBufferSize); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WS03) +_IRQL_requires_max_ (DISPATCH_LEVEL) NTKERNELAPI LOGICAL NTAPI MmIsIoSpaceActive( - IN PHYSICAL_ADDRESS StartAddress, - IN SIZE_T NumberOfBytes); + _In_ PHYSICAL_ADDRESS StartAddress, + _In_ SIZE_T NumberOfBytes); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_Must_inspect_result_ +_IRQL_requires_max_ (DISPATCH_LEVEL) NTKERNELAPI PMDL NTAPI MmAllocatePagesForMdlEx( - IN PHYSICAL_ADDRESS LowAddress, - IN PHYSICAL_ADDRESS HighAddress, - IN PHYSICAL_ADDRESS SkipBytes, - IN SIZE_T TotalBytes, - IN MEMORY_CACHING_TYPE CacheType, - IN ULONG Flags); + _In_ PHYSICAL_ADDRESS LowAddress, + _In_ PHYSICAL_ADDRESS HighAddress, + _In_ PHYSICAL_ADDRESS SkipBytes, + _In_ SIZE_T TotalBytes, + _In_ MEMORY_CACHING_TYPE CacheType, + _In_ ULONG Flags); #endif #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_ (APC_LEVEL) NTKERNELAPI LOGICAL NTAPI MmIsDriverVerifyingByAddress( - IN PVOID AddressWithinSection); + _In_ PVOID AddressWithinSection); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ /****************************************************************************** @@ -11001,110 +11617,116 @@ MmIsDriverVerifyingByAddress( ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI SeAccessCheck( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, - IN BOOLEAN SubjectContextLocked, - IN ACCESS_MASK DesiredAccess, - IN ACCESS_MASK PreviouslyGrantedAccess, - OUT PPRIVILEGE_SET *Privileges OPTIONAL, - IN PGENERIC_MAPPING GenericMapping, - IN KPROCESSOR_MODE AccessMode, - OUT PACCESS_MASK GrantedAccess, - OUT PNTSTATUS AccessStatus); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, + _In_ BOOLEAN SubjectContextLocked, + _In_ ACCESS_MASK DesiredAccess, + _In_ ACCESS_MASK PreviouslyGrantedAccess, + _Outptr_opt_ PPRIVILEGE_SET *Privileges, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PACCESS_MASK GrantedAccess, + _Out_ PNTSTATUS AccessStatus); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI SeAssignSecurity( - IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, - IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, - OUT PSECURITY_DESCRIPTOR *NewDescriptor, - IN BOOLEAN IsDirectoryObject, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN PGENERIC_MAPPING GenericMapping, - IN POOL_TYPE PoolType); + _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor, + _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor, + _Out_ PSECURITY_DESCRIPTOR *NewDescriptor, + _In_ BOOLEAN IsDirectoryObject, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ POOL_TYPE PoolType); NTKERNELAPI NTSTATUS NTAPI SeAssignSecurityEx( - IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, - IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, - OUT PSECURITY_DESCRIPTOR *NewDescriptor, - IN GUID *ObjectType OPTIONAL, - IN BOOLEAN IsDirectoryObject, - IN ULONG AutoInheritFlags, - IN PSECURITY_SUBJECT_CONTEXT SubjectContext, - IN PGENERIC_MAPPING GenericMapping, - IN POOL_TYPE PoolType); + _In_opt_ PSECURITY_DESCRIPTOR ParentDescriptor, + _In_opt_ PSECURITY_DESCRIPTOR ExplicitDescriptor, + _Out_ PSECURITY_DESCRIPTOR *NewDescriptor, + _In_opt_ GUID *ObjectType, + _In_ BOOLEAN IsDirectoryObject, + _In_ ULONG AutoInheritFlags, + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext, + _In_ PGENERIC_MAPPING GenericMapping, + _In_ POOL_TYPE PoolType); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI SeDeassignSecurity( - IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor); + _Inout_ PSECURITY_DESCRIPTOR *SecurityDescriptor); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI SeValidSecurityDescriptor( - IN ULONG Length, - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ ULONG Length, + _In_reads_bytes_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor); NTKERNELAPI ULONG NTAPI SeObjectCreateSaclAccessBits( - IN PSECURITY_DESCRIPTOR SecurityDescriptor); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor); NTKERNELAPI VOID NTAPI SeReleaseSubjectContext( - IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext); + _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext); NTKERNELAPI VOID NTAPI SeUnlockSubjectContext( - IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext); NTKERNELAPI VOID NTAPI SeCaptureSubjectContext( - OUT PSECURITY_SUBJECT_CONTEXT SubjectContext); + _Out_ PSECURITY_SUBJECT_CONTEXT SubjectContext); NTKERNELAPI VOID NTAPI SeLockSubjectContext( - IN PSECURITY_SUBJECT_CONTEXT SubjectContext); + _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_At_(AuditParameters->ParameterCount, _Const_) NTSTATUS NTAPI SeSetAuditParameter( - IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters, - IN SE_ADT_PARAMETER_TYPE Type, - IN ULONG Index, - IN PVOID Data); + _Inout_ PSE_ADT_PARAMETER_ARRAY AuditParameters, + _In_ SE_ADT_PARAMETER_TYPE Type, + _In_range_(<,SE_MAX_AUDIT_PARAMETERS) ULONG Index, + _In_reads_(_Inexpressible_("depends on SE_ADT_PARAMETER_TYPE")) + PVOID Data); NTSTATUS NTAPI SeReportSecurityEvent( - IN ULONG Flags, - IN PUNICODE_STRING SourceName, - IN PSID UserSid OPTIONAL, - IN PSE_ADT_PARAMETER_ARRAY AuditParameters); + _In_ ULONG Flags, + _In_ PUNICODE_STRING SourceName, + _In_opt_ PSID UserSid, + _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ @@ -11113,17 +11735,17 @@ NTKERNELAPI ULONG NTAPI SeComputeAutoInheritByObjectType( - IN PVOID ObjectType, - IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, - IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL); + _In_ PVOID ObjectType, + _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_opt_ PSECURITY_DESCRIPTOR ParentSecurityDescriptor); #ifdef SE_NTFS_WORLD_CACHE VOID NTAPI SeGetWorldRights( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN PGENERIC_MAPPING GenericMapping, - OUT PACCESS_MASK GrantedAccess); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ PGENERIC_MAPPING GenericMapping, + _Out_ PACCESS_MASK GrantedAccess); #endif /* SE_NTFS_WORLD_CACHE */ #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ /****************************************************************************** @@ -11131,65 +11753,72 @@ SeGetWorldRights( ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI CmRegisterCallback( - IN PEX_CALLBACK_FUNCTION Function, - IN PVOID Context OPTIONAL, - OUT PLARGE_INTEGER Cookie); + _In_ PEX_CALLBACK_FUNCTION Function, + _In_opt_ PVOID Context, + _Out_ PLARGE_INTEGER Cookie); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI CmUnRegisterCallback( - IN LARGE_INTEGER Cookie); + _In_ LARGE_INTEGER Cookie); #endif #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI CmRegisterCallbackEx( - PEX_CALLBACK_FUNCTION Function, - PCUNICODE_STRING Altitude, - PVOID Driver, - PVOID Context, - PLARGE_INTEGER Cookie, - PVOID Reserved); + _In_ PEX_CALLBACK_FUNCTION Function, + _In_ PCUNICODE_STRING Altitude, + _In_ PVOID Driver, + _In_opt_ PVOID Context, + _Out_ PLARGE_INTEGER Cookie, + _Reserved_ PVOID Reserved); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI CmGetCallbackVersion( - OUT PULONG Major OPTIONAL, - OUT PULONG Minor OPTIONAL); + _Out_opt_ PULONG Major, + _Out_opt_ PULONG Minor); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI CmSetCallbackObjectContext( - IN OUT PVOID Object, - IN PLARGE_INTEGER Cookie, - IN PVOID NewContext, - OUT PVOID *OldContext OPTIONAL); + _Inout_ PVOID Object, + _In_ PLARGE_INTEGER Cookie, + _In_ PVOID NewContext, + _Out_opt_ PVOID *OldContext); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI CmCallbackGetKeyObjectID( - IN PLARGE_INTEGER Cookie, - IN PVOID Object, - OUT PULONG_PTR ObjectID OPTIONAL, - OUT PCUNICODE_STRING *ObjectName OPTIONAL); + _In_ PLARGE_INTEGER Cookie, + _In_ PVOID Object, + _Out_opt_ PULONG_PTR ObjectID, + _Outptr_opt_ PCUNICODE_STRING *ObjectName); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI CmGetBoundTransaction( - IN PLARGE_INTEGER Cookie, - IN PVOID Object); + _In_ PLARGE_INTEGER Cookie, + _In_ PVOID Object); #endif // NTDDI_VERSION >= NTDDI_VISTA @@ -11648,14 +12277,16 @@ WRITE_REGISTER_USHORT( #define DMA_MACROS_DEFINED +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) FORCEINLINE NTSTATUS IoAllocateAdapterChannel( - IN PDMA_ADAPTER DmaAdapter, - IN PDEVICE_OBJECT DeviceObject, - IN ULONG NumberOfMapRegisters, - IN PDRIVER_CONTROL ExecutionRoutine, - IN PVOID Context) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG NumberOfMapRegisters, + _In_ PDRIVER_CONTROL ExecutionRoutine, + _In_ PVOID Context) { PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; AllocateAdapterChannel = @@ -11665,19 +12296,19 @@ IoAllocateAdapterChannel( DeviceObject, NumberOfMapRegisters, ExecutionRoutine, - Context ); + Context); } FORCEINLINE BOOLEAN NTAPI IoFlushAdapterBuffers( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN ULONG Length, - IN BOOLEAN WriteToDevice) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _In_ ULONG Length, + _In_ BOOLEAN WriteToDevice) { PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers; @@ -11694,7 +12325,7 @@ FORCEINLINE VOID NTAPI IoFreeAdapterChannel( - IN PDMA_ADAPTER DmaAdapter) + _In_ PDMA_ADAPTER DmaAdapter) { PFREE_ADAPTER_CHANNEL FreeAdapterChannel; FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel; @@ -11706,9 +12337,9 @@ FORCEINLINE VOID NTAPI IoFreeMapRegisters( - IN PDMA_ADAPTER DmaAdapter, - IN PVOID MapRegisterBase, - IN ULONG NumberOfMapRegisters) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PVOID MapRegisterBase, + _In_ ULONG NumberOfMapRegisters) { PFREE_MAP_REGISTERS FreeMapRegisters; FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters; @@ -11720,12 +12351,12 @@ FORCEINLINE PHYSICAL_ADDRESS NTAPI IoMapTransfer( - IN PDMA_ADAPTER DmaAdapter, - IN PMDL Mdl, - IN PVOID MapRegisterBase, - IN PVOID CurrentVa, - IN OUT PULONG Length, - IN BOOLEAN WriteToDevice) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ PMDL Mdl, + _In_ PVOID MapRegisterBase, + _In_ PVOID CurrentVa, + _Inout_ PULONG Length, + _In_ BOOLEAN WriteToDevice) { PMAP_TRANSFER MapTransfer; @@ -11742,276 +12373,339 @@ IoMapTransfer( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_Acquires_lock_(_Global_cancel_spin_lock_) +_Requires_lock_not_held_(_Global_cancel_spin_lock_) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_raises_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoAcquireCancelSpinLock( - OUT PKIRQL Irql); + _Out_ _At_(*Irql, _IRQL_saves_) PKIRQL Irql); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoAcquireRemoveLockEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN PCSTR File, - IN ULONG Line, - IN ULONG RemlockSize); + _Inout_ PIO_REMOVE_LOCK RemoveLock, + _In_opt_ PVOID Tag, + _In_ PCSTR File, + _In_ ULONG Line, + _In_ ULONG RemlockSize); + +_IRQL_requires_max_(DISPATCH_LEVEL) +_Ret_range_(<=, 0) NTKERNELAPI NTSTATUS NTAPI IoAllocateDriverObjectExtension( - IN PDRIVER_OBJECT DriverObject, - IN PVOID ClientIdentificationAddress, - IN ULONG DriverObjectExtensionSize, - OUT PVOID *DriverObjectExtension); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PVOID ClientIdentificationAddress, + _In_ ULONG DriverObjectExtensionSize, + _Post_ _At_(*DriverObjectExtension, _When_(return==0, + __drv_aliasesMem __drv_allocatesMem(Mem) _Post_notnull_)) + _When_(return == 0, _Outptr_result_bytebuffer_(DriverObjectExtensionSize)) + PVOID *DriverObjectExtension); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PVOID NTAPI IoAllocateErrorLogEntry( - IN PVOID IoObject, - IN UCHAR EntrySize); + _In_ PVOID IoObject, + _In_ UCHAR EntrySize); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PIRP NTAPI IoAllocateIrp( - IN CCHAR StackSize, - IN BOOLEAN ChargeQuota); + _In_ CCHAR StackSize, + _In_ BOOLEAN ChargeQuota); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PMDL NTAPI IoAllocateMdl( - IN PVOID VirtualAddress OPTIONAL, - IN ULONG Length, - IN BOOLEAN SecondaryBuffer, - IN BOOLEAN ChargeQuota, - IN OUT PIRP Irp OPTIONAL); + _In_opt_ __drv_aliasesMem PVOID VirtualAddress, + _In_ ULONG Length, + _In_ BOOLEAN SecondaryBuffer, + _In_ BOOLEAN ChargeQuota, + _Inout_opt_ PIRP Irp); +__drv_allocatesMem(Mem) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PIO_WORKITEM NTAPI IoAllocateWorkItem( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(APC_LEVEL) +_Ret_range_(<=, 0) NTKERNELAPI NTSTATUS NTAPI IoAttachDevice( - IN PDEVICE_OBJECT SourceDevice, - IN PUNICODE_STRING TargetDevice, - OUT PDEVICE_OBJECT *AttachedDevice); + _In_ _Kernel_requires_resource_held_(Memory) _When_(return==0, __drv_aliasesMem) + PDEVICE_OBJECT SourceDevice, + _In_ PUNICODE_STRING TargetDevice, + _Out_ PDEVICE_OBJECT *AttachedDevice); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack( - IN PDEVICE_OBJECT SourceDevice, - IN PDEVICE_OBJECT TargetDevice); + _In_ _Kernel_requires_resource_held_(Memory) _When_(return!=0, __drv_aliasesMem) + PDEVICE_OBJECT SourceDevice, + _In_ PDEVICE_OBJECT TargetDevice); +_Must_inspect_result_ +__drv_aliasesMem +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PIRP NTAPI IoBuildAsynchronousFsdRequest( - IN ULONG MajorFunction, - IN PDEVICE_OBJECT DeviceObject, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG Length OPTIONAL, - IN PLARGE_INTEGER StartingOffset OPTIONAL, - IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL); + _In_ ULONG MajorFunction, + _In_ PDEVICE_OBJECT DeviceObject, + _Inout_opt_ PVOID Buffer, + _In_opt_ ULONG Length, + _In_opt_ PLARGE_INTEGER StartingOffset, + _In_opt_ PIO_STATUS_BLOCK IoStatusBlock); +_Must_inspect_result_ +__drv_aliasesMem +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PIRP NTAPI IoBuildDeviceIoControlRequest( - IN ULONG IoControlCode, - IN PDEVICE_OBJECT DeviceObject, - IN PVOID InputBuffer OPTIONAL, - IN ULONG InputBufferLength, - OUT PVOID OutputBuffer OPTIONAL, - IN ULONG OutputBufferLength, - IN BOOLEAN InternalDeviceIoControl, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ ULONG IoControlCode, + _In_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_opt_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength, + _In_ BOOLEAN InternalDeviceIoControl, + _In_ PKEVENT Event, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoBuildPartialMdl( - IN PMDL SourceMdl, - IN OUT PMDL TargetMdl, - IN PVOID VirtualAddress, - IN ULONG Length); + _In_ PMDL SourceMdl, + _Inout_ PMDL TargetMdl, + _In_ PVOID VirtualAddress, + _In_ ULONG Length); +_Must_inspect_result_ +__drv_aliasesMem +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PIRP NTAPI IoBuildSynchronousFsdRequest( - IN ULONG MajorFunction, - IN PDEVICE_OBJECT DeviceObject, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG Length OPTIONAL, - IN PLARGE_INTEGER StartingOffset OPTIONAL, - IN PKEVENT Event, - OUT PIO_STATUS_BLOCK IoStatusBlock); + _In_ ULONG MajorFunction, + _In_ PDEVICE_OBJECT DeviceObject, + _Inout_opt_ PVOID Buffer, + _In_opt_ ULONG Length, + _In_opt_ PLARGE_INTEGER StartingOffset, + _In_ PKEVENT Event, + _Out_ PIO_STATUS_BLOCK IoStatusBlock); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Success_(TRUE) NTKERNELAPI NTSTATUS FASTCALL IofCallDriver( - IN PDEVICE_OBJECT DeviceObject, - IN OUT PIRP Irp); + _In_ PDEVICE_OBJECT DeviceObject, + _Inout_ __drv_aliasesMem PIRP Irp); #define IoCallDriver IofCallDriver +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL IofCompleteRequest( - IN PIRP Irp, - IN CCHAR PriorityBoost); + _In_ PIRP Irp, + _In_ CCHAR PriorityBoost); #define IoCompleteRequest IofCompleteRequest +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoCancelIrp( - IN PIRP Irp); + _In_ PIRP Irp); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoCheckShareAccess( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess, - IN BOOLEAN Update); + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG DesiredShareAccess, + _Inout_ PFILE_OBJECT FileObject, + _Inout_ PSHARE_ACCESS ShareAccess, + _In_ BOOLEAN Update); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL IofCompleteRequest( - IN PIRP Irp, - IN CCHAR PriorityBoost); + _In_ PIRP Irp, + _In_ CCHAR PriorityBoost); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoConnectInterrupt( - OUT PKINTERRUPT *InterruptObject, - IN PKSERVICE_ROUTINE ServiceRoutine, - IN PVOID ServiceContext OPTIONAL, - IN PKSPIN_LOCK SpinLock OPTIONAL, - IN ULONG Vector, - IN KIRQL Irql, - IN KIRQL SynchronizeIrql, - IN KINTERRUPT_MODE InterruptMode, - IN BOOLEAN ShareVector, - IN KAFFINITY ProcessorEnableMask, - IN BOOLEAN FloatingSave); + _Out_ PKINTERRUPT *InterruptObject, + _In_ PKSERVICE_ROUTINE ServiceRoutine, + _In_opt_ PVOID ServiceContext, + _In_opt_ PKSPIN_LOCK SpinLock, + _In_ ULONG Vector, + _In_ KIRQL Irql, + _In_ KIRQL SynchronizeIrql, + _In_ KINTERRUPT_MODE InterruptMode, + _In_ BOOLEAN ShareVector, + _In_ KAFFINITY ProcessorEnableMask, + _In_ BOOLEAN FloatingSave); +_IRQL_requires_max_(APC_LEVEL) +_Ret_range_(<=, 0) NTKERNELAPI NTSTATUS NTAPI IoCreateDevice( - IN PDRIVER_OBJECT DriverObject, - IN ULONG DeviceExtensionSize, - IN PUNICODE_STRING DeviceName OPTIONAL, - IN DEVICE_TYPE DeviceType, - IN ULONG DeviceCharacteristics, - IN BOOLEAN Exclusive, - OUT PDEVICE_OBJECT *DeviceObject); + _In_ PDRIVER_OBJECT DriverObject, + _In_ ULONG DeviceExtensionSize, + _In_opt_ PUNICODE_STRING DeviceName, + _In_ DEVICE_TYPE DeviceType, + _In_ ULONG DeviceCharacteristics, + _In_ BOOLEAN Exclusive, + _Outptr_result_nullonfailure_ + _At_(*DeviceObject, + __drv_allocatesMem(Mem) + _When_((((_In_function_class_(DRIVER_INITIALIZE)) + ||(_In_function_class_(DRIVER_DISPATCH)))), + __drv_aliasesMem)) + PDEVICE_OBJECT *DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoCreateFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG Disposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength, - IN CREATE_FILE_TYPE CreateFileType, - IN PVOID InternalParameters OPTIONAL, - IN ULONG Options); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG Disposition, + _In_ ULONG CreateOptions, + _In_opt_ PVOID EaBuffer, + _In_ ULONG EaLength, + _In_ CREATE_FILE_TYPE CreateFileType, + _In_opt_ PVOID InternalParameters, + _In_ ULONG Options); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PKEVENT NTAPI IoCreateNotificationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); + _In_ PUNICODE_STRING EventName, + _Out_ PHANDLE EventHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoCreateSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); + _In_ PUNICODE_STRING SymbolicLinkName, + _In_ PUNICODE_STRING DeviceName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PKEVENT NTAPI IoCreateSynchronizationEvent( - IN PUNICODE_STRING EventName, - OUT PHANDLE EventHandle); + _In_ PUNICODE_STRING EventName, + _Out_ PHANDLE EventHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoCreateUnprotectedSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName, - IN PUNICODE_STRING DeviceName); + _In_ PUNICODE_STRING SymbolicLinkName, + _In_ PUNICODE_STRING DeviceName); +_IRQL_requires_max_(APC_LEVEL) +_Kernel_clear_do_init_(__yes) NTKERNELAPI VOID NTAPI IoDeleteDevice( - IN PDEVICE_OBJECT DeviceObject); + _In_ _Kernel_requires_resource_held_(Memory) __drv_freesMem(Mem) + PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoDeleteSymbolicLink( - IN PUNICODE_STRING SymbolicLinkName); + _In_ PUNICODE_STRING SymbolicLinkName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoDetachDevice( - IN OUT PDEVICE_OBJECT TargetDevice); + _Inout_ PDEVICE_OBJECT TargetDevice); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoDisconnectInterrupt( - IN PKINTERRUPT InterruptObject); + _In_ PKINTERRUPT InterruptObject); +__drv_freesMem(Mem) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoFreeIrp( - IN PIRP Irp); + _In_ PIRP Irp); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoFreeMdl( - IN PMDL Mdl); + PMDL Mdl); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoFreeWorkItem( - IN PIO_WORKITEM IoWorkItem); + _In_ __drv_freesMem(Mem) PIO_WORKITEM IoWorkItem); NTKERNELAPI PDEVICE_OBJECT @@ -12019,75 +12713,96 @@ NTAPI IoGetAttachedDevice( IN PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI NTSTATUS NTAPI IoGetBootDiskInformation( - IN OUT PBOOTDISK_INFORMATION BootDiskInformation, - IN ULONG Size); + _Inout_ PBOOTDISK_INFORMATION BootDiskInformation, + _In_ ULONG Size); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaceAlias( - IN PUNICODE_STRING SymbolicLinkName, - IN CONST GUID *AliasInterfaceClassGuid, - OUT PUNICODE_STRING AliasSymbolicLinkName); + _In_ PUNICODE_STRING SymbolicLinkName, + _In_ CONST GUID *AliasInterfaceClassGuid, + _Out_ + _When_(return==0, _At_(AliasSymbolicLinkName->Buffer, __drv_allocatesMem(Mem))) + PUNICODE_STRING AliasSymbolicLinkName); NTKERNELAPI PEPROCESS NTAPI IoGetCurrentProcess(VOID); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaces( - IN CONST GUID *InterfaceClassGuid, - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN ULONG Flags, - OUT PWSTR *SymbolicLinkList); + _In_ CONST GUID *InterfaceClassGuid, + _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_ ULONG Flags, + _Outptr_result_nullonfailure_ + _At_(*SymbolicLinkList, _When_(return==0, __drv_allocatesMem(Mem))) + PZZWSTR *SymbolicLinkList); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoGetDeviceObjectPointer( - IN PUNICODE_STRING ObjectName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject); + _In_ PUNICODE_STRING ObjectName, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PFILE_OBJECT *FileObject, + _Out_ PDEVICE_OBJECT *DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_((DeviceProperty & __string_type), + _At_(PropertyBuffer, _Post_z_)) +_When_((DeviceProperty & __multiString_type), + _At_(PropertyBuffer, _Post_ _NullNull_terminated_)) NTKERNELAPI NTSTATUS NTAPI IoGetDeviceProperty( - IN PDEVICE_OBJECT DeviceObject, - IN DEVICE_REGISTRY_PROPERTY DeviceProperty, - IN ULONG BufferLength, - OUT PVOID PropertyBuffer, - OUT PULONG ResultLength); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ DEVICE_REGISTRY_PROPERTY DeviceProperty, + _In_ ULONG BufferLength, + _Out_writes_bytes_opt_(BufferLength) PVOID PropertyBuffer, + _Deref_out_range_(<=, BufferLength) PULONG ResultLength); +_Must_inspect_result_ +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI PDMA_ADAPTER NTAPI IoGetDmaAdapter( - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN PDEVICE_DESCRIPTION DeviceDescription, - IN OUT PULONG NumberOfMapRegisters); + _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_ PDEVICE_DESCRIPTION DeviceDescription, + _Out_ _When_(return!=0, _Kernel_IoGetDmaAdapter_ _At_(*NumberOfMapRegisters, _Must_inspect_result_)) + PULONG NumberOfMapRegisters); +__drv_aliasesMem +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI PVOID NTAPI IoGetDriverObjectExtension( - IN PDRIVER_OBJECT DriverObject, - IN PVOID ClientIdentificationAddress); + _In_ PDRIVER_OBJECT DriverObject, + _In_ PVOID ClientIdentificationAddress); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI @@ -12097,298 +12812,350 @@ NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject( - IN PFILE_OBJECT FileObject); + _In_ PFILE_OBJECT FileObject); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoQueueWorkItem( - IN PIO_WORKITEM IoWorkItem, - IN PIO_WORKITEM_ROUTINE WorkerRoutine, - IN WORK_QUEUE_TYPE QueueType, - IN PVOID Context OPTIONAL); + _Inout_ PIO_WORKITEM IoWorkItem, + _In_ PIO_WORKITEM_ROUTINE WorkerRoutine, + _In_ WORK_QUEUE_TYPE QueueType, + _In_opt_ __drv_aliasesMem PVOID Context); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoInitializeIrp( - IN OUT PIRP Irp, - IN USHORT PacketSize, - IN CCHAR StackSize); + _Inout_ PIRP Irp, + _In_ USHORT PacketSize, + _In_ CCHAR StackSize); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoInitializeRemoveLockEx( - IN PIO_REMOVE_LOCK Lock, - IN ULONG AllocateTag, - IN ULONG MaxLockedMinutes, - IN ULONG HighWatermark, - IN ULONG RemlockSize); + _Out_ PIO_REMOVE_LOCK Lock, + _In_ ULONG AllocateTag, + _In_ ULONG MaxLockedMinutes, + _In_ ULONG HighWatermark, + _In_ ULONG RemlockSize); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoInitializeTimer( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_TIMER_ROUTINE TimerRoutine, - IN PVOID Context OPTIONAL); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIO_TIMER_ROUTINE TimerRoutine, + _In_opt_ __drv_aliasesMem PVOID Context); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoInvalidateDeviceRelations( - IN PDEVICE_OBJECT DeviceObject, - IN DEVICE_RELATION_TYPE Type); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ DEVICE_RELATION_TYPE Type); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoInvalidateDeviceState( - IN PDEVICE_OBJECT PhysicalDeviceObject); + _In_ PDEVICE_OBJECT PhysicalDeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI IoIsWdmVersionAvailable( - IN UCHAR MajorVersion, - IN UCHAR MinorVersion); + _When_(MajorVersion!=1&&MajorVersion!=6, _In_ __drv_reportError("MajorVersion must be 1 or 6")) + UCHAR MajorVersion, + _In_ _When_(MinorVersion!=0 && MinorVersion!=5 && + MinorVersion!=16 && MinorVersion!=32 && + MinorVersion!=48, __drv_reportError("MinorVersion must be 0, 0x5, 0x10, 0x20, or 0x30")) + UCHAR MinorVersion); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceInterfaceRegistryKey( - IN PUNICODE_STRING SymbolicLinkName, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE DeviceInterfaceKey); + _In_ PUNICODE_STRING SymbolicLinkName, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE DeviceInterfaceKey); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceRegistryKey( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG DevInstKeyType, - IN ACCESS_MASK DesiredAccess, - OUT PHANDLE DevInstRegKey); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG DevInstKeyType, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE DevInstRegKey); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoRegisterDeviceInterface( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN CONST GUID *InterfaceClassGuid, - IN PUNICODE_STRING ReferenceString OPTIONAL, - OUT PUNICODE_STRING SymbolicLinkName); + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_ CONST GUID *InterfaceClassGuid, + _In_opt_ PUNICODE_STRING ReferenceString, + _Out_ _When_(return==0, _At_(SymbolicLinkName->Buffer, __drv_allocatesMem(Mem))) + PUNICODE_STRING SymbolicLinkName); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoRegisterPlugPlayNotification( - IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, - IN ULONG EventCategoryFlags, - IN PVOID EventCategoryData OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, - IN OUT PVOID Context OPTIONAL, - OUT PVOID *NotificationEntry); + _In_ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, + _In_ ULONG EventCategoryFlags, + _In_opt_ PVOID EventCategoryData, + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, + _Inout_opt_ __drv_aliasesMem PVOID Context, + _Outptr_result_nullonfailure_ + _At_(*NotificationEntry, _When_(return==0, __drv_allocatesMem(Mem))) + PVOID *NotificationEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoRegisterShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); +_Requires_lock_held_(_Global_cancel_spin_lock_) +_Releases_lock_(_Global_cancel_spin_lock_) +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoReleaseCancelSpinLock( - IN KIRQL Irql); + _In_ _IRQL_restores_ _IRQL_uses_cancel_ KIRQL Irql); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoReleaseRemoveLockAndWaitEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN ULONG RemlockSize); + _Inout_ PIO_REMOVE_LOCK RemoveLock, + _In_opt_ PVOID Tag, + _In_ ULONG RemlockSize); NTKERNELAPI VOID NTAPI IoReleaseRemoveLockEx( - IN PIO_REMOVE_LOCK RemoveLock, - IN PVOID Tag OPTIONAL, - IN ULONG RemlockSize); + _Inout_ PIO_REMOVE_LOCK RemoveLock, + _In_opt_ PVOID Tag, + _In_ ULONG RemlockSize); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoRemoveShareAccess( - IN PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess); + _In_ PFILE_OBJECT FileObject, + _Inout_ PSHARE_ACCESS ShareAccess); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChange( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PVOID NotificationStructure); + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_ PVOID NotificationStructure); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChangeAsynchronous( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PVOID NotificationStructure, - IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL, - IN PVOID Context OPTIONAL); + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_ PVOID NotificationStructure, + _In_opt_ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback, + _In_opt_ PVOID Context); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoRequestDeviceEject( - IN PDEVICE_OBJECT PhysicalDeviceObject); + _In_ PDEVICE_OBJECT PhysicalDeviceObject); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoReuseIrp( - IN OUT PIRP Irp, - IN NTSTATUS Status); + _Inout_ PIRP Irp, + _In_ NTSTATUS Status); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoSetDeviceInterfaceState( - IN PUNICODE_STRING SymbolicLinkName, - IN BOOLEAN Enable); + _In_ PUNICODE_STRING SymbolicLinkName, + _In_ BOOLEAN Enable); NTKERNELAPI VOID NTAPI IoSetShareAccess( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - OUT PSHARE_ACCESS ShareAccess); + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG DesiredShareAccess, + _Inout_ PFILE_OBJECT FileObject, + _Out_ PSHARE_ACCESS ShareAccess); +_IRQL_requires_max_(DISPATCH_LEVEL) +_IRQL_requires_min_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoStartNextPacket( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN Cancelable); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN Cancelable); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoStartNextPacketByKey( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN Cancelable, - IN ULONG Key); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN Cancelable, + _In_ ULONG Key); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoStartPacket( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PULONG Key OPTIONAL, - IN PDRIVER_CANCEL CancelFunction OPTIONAL); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_opt_ PULONG Key, + _In_opt_ PDRIVER_CANCEL CancelFunction); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoStartTimer( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoStopTimer( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) +__drv_freesMem(Pool) NTKERNELAPI NTSTATUS NTAPI IoUnregisterPlugPlayNotification( - IN PVOID NotificationEntry); + _In_ PVOID NotificationEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoUnregisterShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI VOID NTAPI IoUpdateShareAccess( - IN PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess); + _In_ PFILE_OBJECT FileObject, + _Inout_ PSHARE_ACCESS ShareAccess); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoWMIAllocateInstanceIds( - IN GUID *Guid, - IN ULONG InstanceCount, - OUT ULONG *FirstInstanceId); + _In_ GUID *Guid, + _In_ ULONG InstanceCount, + _Out_ ULONG *FirstInstanceId); NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstanceMultiple( - IN PVOID *DataBlockObjectList, - IN PUNICODE_STRING InstanceNames, - IN ULONG ObjectCount, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + _In_reads_(ObjectCount) PVOID *DataBlockObjectList, + _In_reads_(ObjectCount) PUNICODE_STRING InstanceNames, + _In_ ULONG ObjectCount, + _Inout_ ULONG *InOutBufferSize, + _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoWMIRegistrationControl( - IN PDEVICE_OBJECT DeviceObject, - IN ULONG Action); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ ULONG Action); NTKERNELAPI NTSTATUS NTAPI IoWMISuggestInstanceName( - IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, - IN PUNICODE_STRING SymbolicLinkName OPTIONAL, - IN BOOLEAN CombineNames, - OUT PUNICODE_STRING SuggestedInstanceName); + _In_opt_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_opt_ PUNICODE_STRING SymbolicLinkName, + _In_ BOOLEAN CombineNames, + _Out_ PUNICODE_STRING SuggestedInstanceName); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) +_Ret_range_(<=, 0) NTKERNELAPI NTSTATUS NTAPI IoWMIWriteEvent( - IN OUT PVOID WnodeEventItem); + _Inout_ _When_(return==0, __drv_aliasesMem) PVOID WnodeEventItem); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI IoWriteErrorLogEntry( - IN PVOID ElEntry); + _In_ PVOID ElEntry); NTKERNELAPI PIRP NTAPI IoGetTopLevelIrp(VOID); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI IoRegisterLastChanceShutdownNotification( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); NTKERNELAPI VOID NTAPI IoSetTopLevelIrp( - IN PIRP Irp OPTIONAL); + _In_opt_ PIRP Irp); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -12400,42 +13167,42 @@ NTKERNELAPI NTSTATUS NTAPI IoCsqInitialize( - IN PIO_CSQ Csq, - IN PIO_CSQ_INSERT_IRP CsqInsertIrp, - IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, - IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, - IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, - IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, - IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); + _Out_ PIO_CSQ Csq, + _In_ PIO_CSQ_INSERT_IRP CsqInsertIrp, + _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, + _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, + _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, + _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, + _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); NTKERNELAPI VOID NTAPI IoCsqInsertIrp( - IN PIO_CSQ Csq, - IN PIRP Irp, - IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL); + _Inout_ PIO_CSQ Csq, + _Inout_ PIRP Irp, + _Out_opt_ PIO_CSQ_IRP_CONTEXT Context); NTKERNELAPI PIRP NTAPI IoCsqRemoveIrp( - IN PIO_CSQ Csq, - IN PIO_CSQ_IRP_CONTEXT Context); + _Inout_ PIO_CSQ Csq, + _Inout_ PIO_CSQ_IRP_CONTEXT Context); NTKERNELAPI PIRP NTAPI IoCsqRemoveNextIrp( - IN PIO_CSQ Csq, - IN PVOID PeekContext OPTIONAL); + _Inout_ PIO_CSQ Csq, + _In_opt_ PVOID PeekContext); NTKERNELAPI BOOLEAN NTAPI IoForwardIrpSynchronously( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp); #define IoForwardAndCatchIrp IoForwardIrpSynchronously @@ -12443,116 +13210,118 @@ NTKERNELAPI VOID NTAPI IoFreeErrorLogEntry( - PVOID ElEntry); + _In_ PVOID ElEntry); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoSetCompletionRoutineEx( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PIO_COMPLETION_ROUTINE CompletionRoutine, - IN PVOID Context, - IN BOOLEAN InvokeOnSuccess, - IN BOOLEAN InvokeOnError, - IN BOOLEAN InvokeOnCancel); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PIO_COMPLETION_ROUTINE CompletionRoutine, + _In_opt_ PVOID Context, + _In_ BOOLEAN InvokeOnSuccess, + _In_ BOOLEAN InvokeOnError, + _In_ BOOLEAN InvokeOnCancel); VOID NTAPI IoSetStartIoAttributes( - IN PDEVICE_OBJECT DeviceObject, - IN BOOLEAN DeferredStartIo, - IN BOOLEAN NonCancelable); + _In_ PDEVICE_OBJECT DeviceObject, + _In_ BOOLEAN DeferredStartIo, + _In_ BOOLEAN NonCancelable); NTKERNELAPI NTSTATUS NTAPI IoWMIDeviceObjectToInstanceName( - IN PVOID DataBlockObject, - IN PDEVICE_OBJECT DeviceObject, - OUT PUNICODE_STRING InstanceName); + _In_ PVOID DataBlockObject, + _In_ PDEVICE_OBJECT DeviceObject, + _Out_ PUNICODE_STRING InstanceName); NTKERNELAPI NTSTATUS NTAPI IoWMIExecuteMethod( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG MethodId, - IN ULONG InBufferSize, - IN OUT PULONG OutBufferSize, - IN OUT PUCHAR InOutBuffer); + _In_ PVOID DataBlockObject, + _In_ PUNICODE_STRING InstanceName, + _In_ ULONG MethodId, + _In_ ULONG InBufferSize, + _Inout_ PULONG OutBufferSize, + _Inout_updates_bytes_to_opt_(*OutBufferSize, InBufferSize) PUCHAR InOutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIHandleToInstanceName( - IN PVOID DataBlockObject, - IN HANDLE FileHandle, - OUT PUNICODE_STRING InstanceName); + _In_ PVOID DataBlockObject, + _In_ HANDLE FileHandle, + _Out_ PUNICODE_STRING InstanceName); NTKERNELAPI NTSTATUS NTAPI IoWMIOpenBlock( - IN GUID *DataBlockGuid, - IN ULONG DesiredAccess, - OUT PVOID *DataBlockObject); + _In_ GUID *DataBlockGuid, + _In_ ULONG DesiredAccess, + _Out_ PVOID *DataBlockObject); NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllData( - IN PVOID DataBlockObject, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + _In_ PVOID DataBlockObject, + _Inout_ ULONG *InOutBufferSize, + _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllDataMultiple( - IN PVOID *DataBlockObjectList, - IN ULONG ObjectCount, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + _In_reads_(ObjectCount) PVOID *DataBlockObjectList, + _In_ ULONG ObjectCount, + _Inout_ ULONG *InOutBufferSize, + _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstance( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN OUT ULONG *InOutBufferSize, - OUT PVOID OutBuffer); + _In_ PVOID DataBlockObject, + _In_ PUNICODE_STRING InstanceName, + _Inout_ ULONG *InOutBufferSize, + _Out_writes_bytes_opt_(*InOutBufferSize) PVOID OutBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMISetNotificationCallback( - IN OUT PVOID Object, - IN WMI_NOTIFICATION_CALLBACK Callback, - IN PVOID Context OPTIONAL); + _Inout_ PVOID Object, + _In_ WMI_NOTIFICATION_CALLBACK Callback, + _In_opt_ PVOID Context); NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleInstance( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG Version, - IN ULONG ValueBufferSize, - IN PVOID ValueBuffer); + _In_ PVOID DataBlockObject, + _In_ PUNICODE_STRING InstanceName, + _In_ ULONG Version, + _In_ ULONG ValueBufferSize, + _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer); NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleItem( - IN PVOID DataBlockObject, - IN PUNICODE_STRING InstanceName, - IN ULONG DataItemId, - IN ULONG Version, - IN ULONG ValueBufferSize, - IN PVOID ValueBuffer); + _In_ PVOID DataBlockObject, + _In_ PUNICODE_STRING InstanceName, + _In_ ULONG DataItemId, + _In_ ULONG Version, + _In_ ULONG ValueBufferSize, + _In_reads_bytes_(ValueBufferSize) PVOID ValueBuffer); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -12561,8 +13330,8 @@ NTKERNELAPI NTSTATUS NTAPI IoValidateDeviceIoControlAccess( - IN PIRP Irp, - IN ULONG RequiredAccess); + _In_ PIRP Irp, + _In_ ULONG RequiredAccess); #endif #if (NTDDI_VERSION >= NTDDI_WS03) @@ -12570,22 +13339,22 @@ NTKERNELAPI NTSTATUS NTAPI IoCsqInitializeEx( - IN PIO_CSQ Csq, - IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp, - IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, - IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, - IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, - IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, - IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); + _Out_ PIO_CSQ Csq, + _In_ PIO_CSQ_INSERT_IRP_EX CsqInsertIrp, + _In_ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, + _In_ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, + _In_ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, + _In_ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, + _In_ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); NTKERNELAPI NTSTATUS NTAPI IoCsqInsertIrpEx( - IN PIO_CSQ Csq, - IN PIRP Irp, - IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL, - IN PVOID InsertContext OPTIONAL); + _Inout_ PIO_CSQ Csq, + _Inout_ PIRP Irp, + _Out_opt_ PIO_CSQ_IRP_CONTEXT Context, + _In_opt_ PVOID InsertContext); #endif /* (NTDDI_VERSION >= NTDDI_WS03) */ @@ -12594,46 +13363,46 @@ NTKERNELAPI NTSTATUS NTAPI IoGetBootDiskInformationLite( - OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation); + _Outptr_ PBOOTDISK_INFORMATION_LITE *BootDiskInformation); NTKERNELAPI NTSTATUS NTAPI IoCheckShareAccessEx( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - IN OUT PSHARE_ACCESS ShareAccess, - IN BOOLEAN Update, - IN PBOOLEAN WritePermission); + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG DesiredShareAccess, + _Inout_ PFILE_OBJECT FileObject, + _Inout_ PSHARE_ACCESS ShareAccess, + _In_ BOOLEAN Update, + _In_ PBOOLEAN WritePermission); NTKERNELAPI NTSTATUS NTAPI IoConnectInterruptEx( - IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters); + _Inout_ PIO_CONNECT_INTERRUPT_PARAMETERS Parameters); NTKERNELAPI VOID NTAPI IoDisconnectInterruptEx( - IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters); + _In_ PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters); LOGICAL NTAPI IoWithinStackLimits( - IN ULONG_PTR RegionStart, - IN SIZE_T RegionSize); + _In_ ULONG_PTR RegionStart, + _In_ SIZE_T RegionSize); NTKERNELAPI VOID NTAPI IoSetShareAccessEx( - IN ACCESS_MASK DesiredAccess, - IN ULONG DesiredShareAccess, - IN OUT PFILE_OBJECT FileObject, - OUT PSHARE_ACCESS ShareAccess, - IN PBOOLEAN WritePermission); + _In_ ACCESS_MASK DesiredAccess, + _In_ ULONG DesiredShareAccess, + _Inout_ PFILE_OBJECT FileObject, + _Out_ PSHARE_ACCESS ShareAccess, + _In_ PBOOLEAN WritePermission); ULONG NTAPI @@ -12642,99 +13411,108 @@ IoSizeofWorkItem(VOID); VOID NTAPI IoInitializeWorkItem( - IN PVOID IoObject, - IN PIO_WORKITEM IoWorkItem); + _In_ PVOID IoObject, + _Out_ PIO_WORKITEM IoWorkItem); VOID NTAPI IoUninitializeWorkItem( - IN PIO_WORKITEM IoWorkItem); + _Inout_ PIO_WORKITEM IoWorkItem); +_IRQL_requires_max_(DISPATCH_LEVEL) VOID NTAPI IoQueueWorkItemEx( - IN PIO_WORKITEM IoWorkItem, - IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine, - IN WORK_QUEUE_TYPE QueueType, - IN PVOID Context OPTIONAL); + _Inout_ PIO_WORKITEM IoWorkItem, + _In_ PIO_WORKITEM_ROUTINE_EX WorkerRoutine, + _In_ WORK_QUEUE_TYPE QueueType, + _In_opt_ __drv_aliasesMem PVOID Context); IO_PRIORITY_HINT NTAPI IoGetIoPriorityHint( - IN PIRP Irp); + _In_ PIRP Irp); NTSTATUS NTAPI IoSetIoPriorityHint( - IN PIRP Irp, - IN IO_PRIORITY_HINT PriorityHint); + _In_ PIRP Irp, + _In_ IO_PRIORITY_HINT PriorityHint); NTSTATUS NTAPI IoAllocateSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN ULONG Length, - IN PVOID Signature, - OUT PVOID *StreamIdentifier); + _In_ PFILE_OBJECT FileObject, + _In_ ULONG Length, + _In_ PVOID Signature, + _Out_ PVOID *StreamIdentifier); PVOID NTAPI IoGetSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN PVOID Signature); + _In_ PFILE_OBJECT FileObject, + _In_ PVOID Signature); NTSTATUS NTAPI IoFreeSfioStreamIdentifier( - IN PFILE_OBJECT FileObject, - IN PVOID Signature); + _In_ PFILE_OBJECT FileObject, + _In_ PVOID Signature); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoRequestDeviceEjectEx( - IN PDEVICE_OBJECT PhysicalDeviceObject, - IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL, - IN PVOID Context OPTIONAL, - IN PDRIVER_OBJECT DriverObject OPTIONAL); + _In_ PDEVICE_OBJECT PhysicalDeviceObject, + _In_opt_ PIO_DEVICE_EJECT_CALLBACK Callback, + _In_opt_ PVOID Context, + _In_opt_ PDRIVER_OBJECT DriverObject); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoSetDevicePropertyData( - IN PDEVICE_OBJECT Pdo, - IN CONST DEVPROPKEY *PropertyKey, - IN LCID Lcid, - IN ULONG Flags, - IN DEVPROPTYPE Type, - IN ULONG Size, - IN PVOID Data OPTIONAL); + _In_ PDEVICE_OBJECT Pdo, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ LCID Lcid, + _In_ ULONG Flags, + _In_ DEVPROPTYPE Type, + _In_ ULONG Size, + _In_opt_ PVOID Data); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoGetDevicePropertyData( - PDEVICE_OBJECT Pdo, - CONST DEVPROPKEY *PropertyKey, - LCID Lcid, - ULONG Flags, - ULONG Size, - PVOID Data, - PULONG RequiredSize, - PDEVPROPTYPE Type); + _In_ PDEVICE_OBJECT Pdo, + _In_ CONST DEVPROPKEY *PropertyKey, + _In_ LCID Lcid, + _Reserved_ ULONG Flags, + _In_ ULONG Size, + _Out_ PVOID Data, + _Out_ PULONG RequiredSize, + _Out_ PDEVPROPTYPE Type); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b) #if (NTDDI_VERSION >= NTDDI_WS08) +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoReplacePartitionUnit( - IN PDEVICE_OBJECT TargetPdo, - IN PDEVICE_OBJECT SparePdo, - IN ULONG Flags); + _In_ PDEVICE_OBJECT TargetPdo, + _In_ PDEVICE_OBJECT SparePdo, + _In_ ULONG Flags); #endif #if (NTDDI_VERSION >= NTDDI_WIN7) @@ -12743,43 +13521,47 @@ NTKERNELAPI NTSTATUS NTAPI IoGetAffinityInterrupt( - IN PKINTERRUPT InterruptObject, - OUT PGROUP_AFFINITY GroupAffinity); + _In_ PKINTERRUPT InterruptObject, + _Out_ PGROUP_AFFINITY GroupAffinity); NTSTATUS NTAPI IoGetContainerInformation( - IN IO_CONTAINER_INFORMATION_CLASS InformationClass, - IN PVOID ContainerObject OPTIONAL, - IN OUT PVOID Buffer OPTIONAL, - IN ULONG BufferLength); + _In_ IO_CONTAINER_INFORMATION_CLASS InformationClass, + _In_opt_ PVOID ContainerObject, + _Inout_updates_bytes_opt_(BufferLength) PVOID Buffer, + _In_ ULONG BufferLength); NTSTATUS NTAPI IoRegisterContainerNotification( - IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass, - IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction, - IN PVOID NotificationInformation OPTIONAL, - IN ULONG NotificationInformationLength, - OUT PVOID CallbackRegistration); + _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass, + _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction, + _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation, + _In_ ULONG NotificationInformationLength, + _Out_ PVOID CallbackRegistration); VOID NTAPI IoUnregisterContainerNotification( - IN PVOID CallbackRegistration); + _In_ PVOID CallbackRegistration); +_IRQL_requires_max_(PASSIVE_LEVEL) +__drv_freesMem(Pool) NTKERNELAPI NTSTATUS NTAPI IoUnregisterPlugPlayNotificationEx( - IN PVOID NotificationEntry); + _In_ PVOID NotificationEntry); +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI IoGetDeviceNumaNode( - IN PDEVICE_OBJECT Pdo, - OUT PUSHORT NodeNumber); + _In_ PDEVICE_OBJECT Pdo, + _Out_ PUSHORT NodeNumber); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -12788,7 +13570,7 @@ NTKERNELAPI ULONG NTAPI IoWMIDeviceObjectToProviderId( - IN PDEVICE_OBJECT DeviceObject); + _In_ PDEVICE_OBJECT DeviceObject); #else #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject)) #endif @@ -12804,7 +13586,7 @@ IoWMIDeviceObjectToProviderId( FORCEINLINE VOID IoSkipCurrentIrpStackLocation( - IN OUT PIRP Irp) + _Inout_ PIRP Irp) { ASSERT(Irp->CurrentLocation <= Irp->StackCount); Irp->CurrentLocation++; @@ -12818,7 +13600,7 @@ IoSkipCurrentIrpStackLocation( FORCEINLINE VOID IoSetNextIrpStackLocation( - IN OUT PIRP Irp) + _Inout_ PIRP Irp) { ASSERT(Irp->CurrentLocation > 0); Irp->CurrentLocation--; @@ -12829,10 +13611,11 @@ IoSetNextIrpStackLocation( #endif } +__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation( - IN PIRP Irp) + _In_ PIRP Irp) { ASSERT(Irp->CurrentLocation > 0); #ifdef NONAMELESSUNION @@ -12842,15 +13625,16 @@ IoGetNextIrpStackLocation( #endif } +_IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID IoSetCompletionRoutine( - IN PIRP Irp, - IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL, - IN PVOID Context OPTIONAL, - IN BOOLEAN InvokeOnSuccess, - IN BOOLEAN InvokeOnError, - IN BOOLEAN InvokeOnCancel) + _In_ PIRP Irp, + _In_opt_ PIO_COMPLETION_ROUTINE CompletionRoutine, + _In_opt_ __drv_aliasesMem PVOID Context, + _In_ BOOLEAN InvokeOnSuccess, + _In_ BOOLEAN InvokeOnError, + _In_ BOOLEAN InvokeOnCancel) { PIO_STACK_LOCATION irpSp; ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE ); @@ -12872,26 +13656,26 @@ IoSetCompletionRoutine( } } -/* - * PDRIVER_CANCEL - * IoSetCancelRoutine( - * IN PIRP Irp, - * IN PDRIVER_CANCEL CancelRoutine) - */ -#define IoSetCancelRoutine(_Irp, \ - _CancelRoutine) \ - ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \ - (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine))) +_IRQL_requires_max_(DISPATCH_LEVEL) +_Ret_maybenull_ +FORCEINLINE +PDRIVER_CANCEL +IoSetCancelRoutine( + _Inout_ PIRP Irp, + _In_opt_ PDRIVER_CANCEL CancelRoutine) +{ + return (PDRIVER_CANCEL)(ULONG_PTR) InterlockedExchangePointer((PVOID *)&(Irp)->CancelRoutine, (PVOID)(ULONG_PTR)(CancelRoutine)); +} -/* - * VOID - * IoRequestDpc( - * IN PDEVICE_OBJECT DeviceObject, - * IN PIRP Irp, - * IN PVOID Context); - */ -#define IoRequestDpc(DeviceObject, Irp, Context)( \ - KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context))) +FORCEINLINE +VOID +IoRequestDpc( + _Inout_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PIRP Irp, + _In_opt_ __drv_aliasesMem PVOID Context) +{ + KeInsertQueueDpc(&DeviceObject->Dpc, Irp, Context); +} /* * VOID @@ -12914,20 +13698,22 @@ IoSetCompletionRoutine( IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) #if defined(_WIN64) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN IoIs32bitProcess( - IN PIRP Irp OPTIONAL); + _In_opt_ PIRP Irp); #endif #define PLUGPLAY_REGKEY_DEVICE 1 #define PLUGPLAY_REGKEY_DRIVER 2 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 +__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation( - IN PIRP Irp) + _In_ PIRP Irp) { ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1); #ifdef NONAMELESSUNION @@ -12940,9 +13726,9 @@ IoGetCurrentIrpStackLocation( FORCEINLINE VOID IoMarkIrpPending( - IN OUT PIRP Irp) + _Inout_ PIRP Irp) { - IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED; + IoGetCurrentIrpStackLocation((Irp))->Control |= SL_PENDING_RETURNED; } /* @@ -12974,12 +13760,12 @@ IoMarkIrpPending( FORCEINLINE VOID IoInitializeDpcRequest( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_DPC_ROUTINE DpcRoutine) + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIO_DPC_ROUTINE DpcRoutine) { - KeInitializeDpc( &DeviceObject->Dpc, - (PKDEFERRED_ROUTINE) DpcRoutine, - DeviceObject ); + KeInitializeDpc(&DeviceObject->Dpc, + (PKDEFERRED_ROUTINE) DpcRoutine, + DeviceObject); } #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 @@ -12995,49 +13781,51 @@ IoInitializeDpcRequest( FORCEINLINE VOID IoCopyCurrentIrpStackLocationToNext( - IN OUT PIRP Irp) + _Inout_ PIRP Irp) { - PIO_STACK_LOCATION irpSp; - PIO_STACK_LOCATION nextIrpSp; - irpSp = IoGetCurrentIrpStackLocation(Irp); - nextIrpSp = IoGetNextIrpStackLocation(Irp); - RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); - nextIrpSp->Control = 0; + PIO_STACK_LOCATION irpSp; + PIO_STACK_LOCATION nextIrpSp; + irpSp = IoGetCurrentIrpStackLocation(Irp); + nextIrpSp = IoGetNextIrpStackLocation(Irp); + RtlCopyMemory(nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); + nextIrpSp->Control = 0; } +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI IoGetStackLimits( - OUT PULONG_PTR LowLimit, - OUT PULONG_PTR HighLimit); + _Out_ PULONG_PTR LowLimit, + _Out_ PULONG_PTR HighLimit); +_IRQL_requires_max_(APC_LEVEL) FORCEINLINE ULONG_PTR IoGetRemainingStackSize(VOID) { - ULONG_PTR End, Begin; - ULONG_PTR Result; + ULONG_PTR End, Begin; + ULONG_PTR Result; - IoGetStackLimits(&Begin, &End); - Result = (ULONG_PTR)(&End) - Begin; - return Result; + IoGetStackLimits(&Begin, &End); + Result = (ULONG_PTR)(&End) - Begin; + return Result; } #if (NTDDI_VERSION >= NTDDI_WS03) FORCEINLINE VOID IoInitializeThreadedDpcRequest( - IN PDEVICE_OBJECT DeviceObject, - IN PIO_DPC_ROUTINE DpcRoutine) + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIO_DPC_ROUTINE DpcRoutine) { #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:28128) #endif - KeInitializeThreadedDpc(&DeviceObject->Dpc, - (PKDEFERRED_ROUTINE) DpcRoutine, - DeviceObject ); + KeInitializeThreadedDpc(&DeviceObject->Dpc, + (PKDEFERRED_ROUTINE) DpcRoutine, + DeviceObject ); #ifdef _MSC_VER #pragma warning(pop) #endif @@ -13052,65 +13840,73 @@ IoInitializeThreadedDpcRequest( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoCallDriver( - IN struct _DEVICE_OBJECT *DeviceObject, - IN OUT struct _IRP *Irp); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _Inout_ __drv_aliasesMem struct _IRP *Irp); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PULONG NTAPI PoRegisterDeviceForIdleDetection( - IN struct _DEVICE_OBJECT *DeviceObject, - IN ULONG ConservationIdleTime, - IN ULONG PerformanceIdleTime, - IN DEVICE_POWER_STATE State); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ ULONG ConservationIdleTime, + _In_ ULONG PerformanceIdleTime, + _In_ DEVICE_POWER_STATE State); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI PoRegisterSystemState( - IN OUT PVOID StateHandle OPTIONAL, - IN EXECUTION_STATE Flags); + _Inout_opt_ PVOID StateHandle, + _In_ EXECUTION_STATE Flags); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoRequestPowerIrp( - IN struct _DEVICE_OBJECT *DeviceObject, - IN UCHAR MinorFunction, - IN POWER_STATE PowerState, - IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL, - IN PVOID Context OPTIONAL, - OUT struct _IRP **Irp OPTIONAL); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ UCHAR MinorFunction, + _In_ POWER_STATE PowerState, + _In_opt_ PREQUEST_POWER_COMPLETE CompletionFunction, + _In_opt_ __drv_aliasesMem PVOID Context, + _Outptr_opt_ struct _IRP **Irp); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI POWER_STATE NTAPI PoSetPowerState( - IN struct _DEVICE_OBJECT *DeviceObject, - IN POWER_STATE_TYPE Type, - IN POWER_STATE State); + _In_ struct _DEVICE_OBJECT *DeviceObject, + _In_ POWER_STATE_TYPE Type, + _In_ POWER_STATE State); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI PoSetSystemState( - IN EXECUTION_STATE Flags); + _In_ EXECUTION_STATE Flags); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI PoStartNextPowerIrp( - IN OUT struct _IRP *Irp); + _Inout_ struct _IRP *Irp); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI PoUnregisterSystemState( - IN OUT PVOID StateHandle); + _Inout_ PVOID StateHandle); NTKERNELAPI NTSTATUS @@ -13122,33 +13918,37 @@ PoRequestShutdownEvent( #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI PoSetSystemWake( - IN OUT struct _IRP *Irp); + _Inout_ struct _IRP *Irp); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI PoGetSystemWake( - IN struct _IRP *Irp); + _In_ struct _IRP *Irp); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoRegisterPowerSettingCallback( - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN LPCGUID SettingGuid, - IN PPOWER_SETTING_CALLBACK Callback, - IN PVOID Context OPTIONAL, - OUT PVOID *Handle OPTIONAL); + _In_opt_ PDEVICE_OBJECT DeviceObject, + _In_ LPCGUID SettingGuid, + _In_ PPOWER_SETTING_CALLBACK Callback, + _In_opt_ PVOID Context, + _Outptr_opt_ PVOID *Handle); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoUnregisterPowerSettingCallback( - IN OUT PVOID Handle); + _Inout_ PVOID Handle); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -13157,7 +13957,7 @@ NTKERNELAPI VOID NTAPI PoSetDeviceBusyEx( - IN OUT PULONG IdlePointer); + _Inout_ PULONG IdlePointer); #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ #if (NTDDI_VERSION >= NTDDI_WIN7) @@ -13166,48 +13966,53 @@ NTKERNELAPI VOID NTAPI PoStartDeviceBusy( - IN OUT PULONG IdlePointer); + _Inout_ PULONG IdlePointer); NTKERNELAPI VOID NTAPI PoEndDeviceBusy( - IN OUT PULONG IdlePointer); + _Inout_ PULONG IdlePointer); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI PoQueryWatchdogTime( - IN PDEVICE_OBJECT Pdo, - OUT PULONG SecondsRemaining); + _In_ PDEVICE_OBJECT Pdo, + _Out_ PULONG SecondsRemaining); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI PoDeletePowerRequest( - IN OUT PVOID PowerRequest); + _Inout_ PVOID PowerRequest); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoSetPowerRequest( - IN OUT PVOID PowerRequest, - IN POWER_REQUEST_TYPE Type); + _Inout_ PVOID PowerRequest, + _In_ POWER_REQUEST_TYPE Type); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoClearPowerRequest( - IN OUT PVOID PowerRequest, - IN POWER_REQUEST_TYPE Type); + _Inout_ PVOID PowerRequest, + _In_ POWER_REQUEST_TYPE Type); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI PoCreatePowerRequest( - OUT PVOID *PowerRequest, - IN PDEVICE_OBJECT DeviceObject, - IN PCOUNTED_REASON_CONTEXT Context); + _Outptr_ PVOID *PowerRequest, + _In_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PCOUNTED_REASON_CONTEXT Context); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ @@ -13254,23 +14059,34 @@ ExiTryToAcquireFastMutex( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_raises_(APC_LEVEL) +_IRQL_saves_global_(OldIrql, FastMutex) NTKERNELAPI VOID FASTCALL ExAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) + PFAST_MUTEX FastMutex); +_IRQL_requires_(APC_LEVEL) +_IRQL_restores_global_(OldIrql, FastMutex) NTKERNELAPI VOID FASTCALL ExReleaseFastMutex( - IN OUT PFAST_MUTEX FastMutex); + _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) + PFAST_MUTEX FastMutex); +_Must_inspect_result_ +_Success_(return!=FALSE) +_IRQL_raises_(APC_LEVEL) +_IRQL_saves_global_(OldIrql, FastMutex) NTKERNELAPI BOOLEAN FASTCALL ExTryToAcquireFastMutex( - IN OUT PFAST_MUTEX FastMutex); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) + PFAST_MUTEX FastMutex); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -13291,11 +14107,11 @@ ExTryToAcquireFastMutex( defined(_NTHAL_) || defined(_NTOSP_) NTKERNELAPI USHORT -ExQueryDepthSList(IN PSLIST_HEADER ListHead); +ExQueryDepthSList(_In_ PSLIST_HEADER ListHead); #else FORCEINLINE USHORT -ExQueryDepthSList(IN PSLIST_HEADER ListHead) +ExQueryDepthSList(_In_ PSLIST_HEADER ListHead) { return (USHORT)(ListHead->Alignment & 0xffff); } @@ -13309,13 +14125,13 @@ ExpInterlockedFlushSList( NTKERNELAPI PSLIST_ENTRY ExpInterlockedPopEntrySList( - PSLIST_HEADER ListHead); + _Inout_ PSLIST_HEADER ListHead); NTKERNELAPI PSLIST_ENTRY ExpInterlockedPushEntrySList( - PSLIST_HEADER ListHead, - PSLIST_ENTRY ListEntry); + _Inout_ PSLIST_HEADER ListHead, + _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry); #define ExInterlockedFlushSList(Head) \ ExpInterlockedFlushSList(Head) @@ -13336,7 +14152,7 @@ NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedFlushSList( - IN OUT PSLIST_HEADER ListHead); + _Inout_ PSLIST_HEADER ListHead); #endif /* !defined(_WIN64) */ @@ -13346,29 +14162,31 @@ NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPopEntrySList( - IN PSLIST_HEADER ListHead, - IN PKSPIN_LOCK Lock); + _Inout_ PSLIST_HEADER ListHead, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPushEntrySList( - IN PSLIST_HEADER ListHead, - IN PSINGLE_LIST_ENTRY ListEntry, - IN PKSPIN_LOCK Lock); + _Inout_ PSLIST_HEADER ListHead, + _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI ExAllocateFromPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside); + _Inout_ PPAGED_LOOKASIDE_LIST Lookaside); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExFreeToPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry); + _Inout_ PPAGED_LOOKASIDE_LIST Lookaside, + _In_ PVOID Entry); #else /* !_WIN2K_COMPAT_SLIST_USAGE */ @@ -13379,10 +14197,11 @@ ExFreeToPagedLookasideList( InterlockedPushEntrySList(_ListHead, _ListEntry) #endif +_IRQL_requires_max_(APC_LEVEL) static __inline PVOID ExAllocateFromPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside) + _Inout_ PPAGED_LOOKASIDE_LIST Lookaside) { PVOID Entry; @@ -13407,11 +14226,12 @@ ExAllocateFromPagedLookasideList( return Entry; } +_IRQL_requires_max_(APC_LEVEL) static __inline VOID ExFreeToPagedLookasideList( - IN OUT PPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) + _Inout_ PPAGED_LOOKASIDE_LIST Lookaside, + _In_ PVOID Entry) { Lookaside->L.TotalFrees++; #ifdef NONAMELESSUNION @@ -13458,7 +14278,7 @@ ExFreeToPagedLookasideList( FORCEINLINE VOID ExInitializeFastMutex( - OUT PFAST_MUTEX FastMutex) + _Out_ PFAST_MUTEX FastMutex) { FastMutex->Count = FM_LOCK_BIT; FastMutex->Owner = NULL; @@ -13469,193 +14289,294 @@ ExInitializeFastMutex( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(APC_LEVEL) +_Requires_lock_held_(_Global_critical_region_) NTKERNELAPI VOID FASTCALL ExAcquireFastMutexUnsafe( - IN OUT PFAST_MUTEX FastMutex); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) + PFAST_MUTEX FastMutex); +_IRQL_requires_max_(APC_LEVEL) +_Requires_lock_held_(_Global_critical_region_) NTKERNELAPI VOID FASTCALL ExReleaseFastMutexUnsafe( - IN OUT PFAST_MUTEX FastMutex); + _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) + PFAST_MUTEX FastMutex); +_Requires_lock_held_(_Global_critical_region_) +_Requires_lock_not_held_(*Resource) +_When_(Wait!=0, _Acquires_exclusive_lock_(*Resource)) +_IRQL_requires_max_(APC_LEVEL) +_When_(Wait!=0, _Post_satisfies_(return == 1)) +_When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceExclusiveLite( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + _Inout_ PERESOURCE Resource, + _In_ _Literal_ BOOLEAN Wait); +_IRQL_requires_max_(APC_LEVEL) +_Requires_lock_held_(_Global_critical_region_) +_When_(Wait!=0, _Post_satisfies_(return == 1)) +_When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceSharedLite( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + _Inout_ _Requires_lock_not_held_(*_Curr_) + _When_(return!=0, _Acquires_shared_lock_(*_Curr_)) + PERESOURCE Resource, + _In_ BOOLEAN Wait); +_IRQL_requires_max_(APC_LEVEL) +_Requires_lock_held_(_Global_critical_region_) +_When_(Wait!=0, _Post_satisfies_(return == 1)) +_When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedStarveExclusive( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + _Inout_ _Requires_lock_not_held_(*_Curr_) + _When_(return!=0, _Acquires_shared_lock_(*_Curr_)) + PERESOURCE Resource, + _In_ BOOLEAN Wait); +_IRQL_requires_max_(APC_LEVEL) +_Requires_lock_held_(_Global_critical_region_) +_When_(Wait!=0, _Post_satisfies_(return == 1)) +_When_(Wait==0, _Post_satisfies_(return == 0 || return == 1) _Must_inspect_result_) NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedWaitForExclusive( - IN OUT PERESOURCE Resource, - IN BOOLEAN Wait); + _Inout_ _Requires_lock_not_held_(*_Curr_) + _When_(return!=0, _Acquires_lock_(*_Curr_)) + PERESOURCE Resource, + _In_ BOOLEAN Wait); +__drv_preferredFunction("ExAllocatePoolWithTag", + "No tag interferes with debugging.") +__drv_allocatesMem(Mem) +_When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_((PoolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) +_When_((PoolType & (NonPagedPoolMustSucceed | + POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, + _Post_maybenull_ _Must_inspect_result_) +_When_((PoolType & (NonPagedPoolMustSucceed | + POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, + _Post_notnull_) +_Post_writable_byte_size_(NumberOfBytes) NTKERNELAPI PVOID NTAPI ExAllocatePool( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes); + __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes); +__drv_preferredFunction("ExAllocatePoolWithQuotaTag", + "No tag interferes with debugging.") +__drv_allocatesMem(Mem) +_When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_((PoolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) +_When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) != 0, + _Post_maybenull_ _Must_inspect_result_) +_When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) == 0, _Post_notnull_) +_Post_writable_byte_size_(NumberOfBytes) NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuota( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes); + __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes); +__drv_allocatesMem(Mem) +_When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_((PoolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) +_When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) != 0, + _Post_maybenull_ _Must_inspect_result_) +_When_((PoolType & POOL_QUOTA_FAIL_INSTEAD_OF_RAISE) == 0, _Post_notnull_) +_Post_writable_byte_size_(NumberOfBytes) NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuotaTag( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); + _In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes, + _In_ ULONG Tag); #ifndef POOL_TAGGING #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b) #endif +__drv_allocatesMem(Mem) +_When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_((PoolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) +_When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, + _Post_maybenull_ _Must_inspect_result_) +_When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, + _Post_notnull_) +_Post_writable_byte_size_(NumberOfBytes) NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTag( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag); + _In_ __drv_strictTypeMatch(__drv_typeExpr) POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes, + _In_ ULONG Tag); #ifndef POOL_TAGGING #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b) #endif +__drv_allocatesMem(Mem) +_When_((PoolType & PagedPool) != 0, _IRQL_requires_max_(APC_LEVEL)) +_When_((PoolType & PagedPool) == 0, _IRQL_requires_max_(DISPATCH_LEVEL)) +_When_((PoolType & NonPagedPoolMustSucceed) != 0, + __drv_reportError("Must succeed pool allocations are forbidden. " + "Allocation failures cause a system crash")) +_When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) == 0, + _Post_maybenull_ _Must_inspect_result_) +_When_((PoolType & (NonPagedPoolMustSucceed | POOL_RAISE_IF_ALLOCATION_FAILURE)) != 0, + _Post_notnull_) +_Post_writable_byte_size_(NumberOfBytes) NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTagPriority( - IN POOL_TYPE PoolType, - IN SIZE_T NumberOfBytes, - IN ULONG Tag, - IN EX_POOL_PRIORITY Priority); + _In_ __drv_strictTypeMatch(__drv_typeCond) POOL_TYPE PoolType, + _In_ SIZE_T NumberOfBytes, + _In_ ULONG Tag, + _In_ __drv_strictTypeMatch(__drv_typeExpr) EX_POOL_PRIORITY Priority); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExConvertExclusiveToSharedLite( - IN OUT PERESOURCE Resource); + _Inout_ _Requires_lock_held_(*_Curr_) PERESOURCE Resource); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExCreateCallback( - OUT PCALLBACK_OBJECT *CallbackObject, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN BOOLEAN Create, - IN BOOLEAN AllowMultipleCallbacks); + _Outptr_ PCALLBACK_OBJECT *CallbackObject, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN Create, + _In_ BOOLEAN AllowMultipleCallbacks); NTKERNELAPI VOID NTAPI ExDeleteNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside); + _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExDeletePagedLookasideList( - IN PPAGED_LOOKASIDE_LIST Lookaside); + _Inout_ PPAGED_LOOKASIDE_LIST Lookaside); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExDeleteResourceLite( - IN OUT PERESOURCE Resource); + _Inout_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExFreePool( - IN PVOID P); + _In_ __drv_freesMem(Mem) PVOID P); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExFreePoolWithTag( - IN PVOID P, - IN ULONG Tag); + _In_ __drv_freesMem(Mem) PVOID P, + _In_ ULONG Tag); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI ULONG NTAPI ExGetExclusiveWaiterCount( - IN PERESOURCE Resource); + _In_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI KPROCESSOR_MODE NTAPI ExGetPreviousMode(VOID); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI ULONG NTAPI ExGetSharedWaiterCount( - IN PERESOURCE Resource); + _In_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExInitializeNPagedLookasideList( - IN PNPAGED_LOOKASIDE_LIST Lookaside, - IN PALLOCATE_FUNCTION Allocate OPTIONAL, - IN PFREE_FUNCTION Free OPTIONAL, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + _Out_ PNPAGED_LOOKASIDE_LIST Lookaside, + _In_opt_ PALLOCATE_FUNCTION Allocate, + _In_opt_ PFREE_FUNCTION Free, + _In_ ULONG Flags, + _In_ SIZE_T Size, + _In_ ULONG Tag, + _In_ USHORT Depth); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExInitializePagedLookasideList( - IN PPAGED_LOOKASIDE_LIST Lookaside, - IN PALLOCATE_FUNCTION Allocate OPTIONAL, - IN PFREE_FUNCTION Free OPTIONAL, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + _Out_ PPAGED_LOOKASIDE_LIST Lookaside, + _In_opt_ PALLOCATE_FUNCTION Allocate, + _In_opt_ PFREE_FUNCTION Free, + _In_ ULONG Flags, + _In_ SIZE_T Size, + _In_ ULONG Tag, + _In_ USHORT Depth); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExInitializeResourceLite( - OUT PERESOURCE Resource); + _Out_ PERESOURCE Resource); NTKERNELAPI LARGE_INTEGER NTAPI ExInterlockedAddLargeInteger( - IN PLARGE_INTEGER Addend, - IN LARGE_INTEGER Increment, - IN PKSPIN_LOCK Lock); + _Inout_ PLARGE_INTEGER Addend, + _In_ LARGE_INTEGER Increment, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); #if defined(_WIN64) #define ExInterlockedAddLargeStatistic(Addend, Increment) \ @@ -13669,9 +14590,9 @@ NTKERNELAPI ULONG FASTCALL ExInterlockedAddUlong( - IN PULONG Addend, - IN ULONG Increment, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PULONG Addend, + _In_ ULONG Increment, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); #if defined(_AMD64_) || defined(_IA64_) @@ -13684,9 +14605,9 @@ NTKERNELAPI LONGLONG FASTCALL ExfInterlockedCompareExchange64( - IN OUT LONGLONG volatile *Destination, - IN PLONGLONG Exchange, - IN PLONGLONG Comperand); + _Inout_ _Interlocked_operand_ LONGLONG volatile *Destination, + _In_ PLONGLONG Exchange, + _In_ PLONGLONG Comperand); #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ ExfInterlockedCompareExchange64(Destination, Exchange, Comperand) @@ -13708,57 +14629,60 @@ NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedInsertHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PLIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedInsertTailList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PLIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PLIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PLIST_ENTRY ListEntry, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPopEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PSINGLE_LIST_ENTRY ListHead, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExInterlockedPushEntryList( - IN OUT PSINGLE_LIST_ENTRY ListHead, - IN OUT PSINGLE_LIST_ENTRY ListEntry, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PSINGLE_LIST_ENTRY ListHead, + _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY ListEntry, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); NTKERNELAPI PLIST_ENTRY FASTCALL ExInterlockedRemoveHeadList( - IN OUT PLIST_ENTRY ListHead, - IN OUT PKSPIN_LOCK Lock); + _Inout_ PLIST_ENTRY ListHead, + _Inout_ _Requires_lock_not_held_(*_Curr_) PKSPIN_LOCK Lock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI BOOLEAN NTAPI ExIsProcessorFeaturePresent( - IN ULONG ProcessorFeature); + _In_ ULONG ProcessorFeature); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI BOOLEAN NTAPI ExIsResourceAcquiredExclusiveLite( - IN PERESOURCE Resource); + _In_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI ULONG NTAPI ExIsResourceAcquiredSharedLite( - IN PERESOURCE Resource); + _In_ PERESOURCE Resource); #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite @@ -13766,226 +14690,266 @@ NTKERNELAPI VOID NTAPI ExLocalTimeToSystemTime( - IN PLARGE_INTEGER LocalTime, - OUT PLARGE_INTEGER SystemTime); + _In_ PLARGE_INTEGER LocalTime, + _Out_ PLARGE_INTEGER SystemTime); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExNotifyCallback( - IN PCALLBACK_OBJECT CallbackObject, - IN PVOID Argument1 OPTIONAL, - IN PVOID Argument2 OPTIONAL); + _In_ PCALLBACK_OBJECT CallbackObject, + _In_opt_ PVOID Argument1, + _In_opt_ PVOID Argument2); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExQueueWorkItem( - IN OUT PWORK_QUEUE_ITEM WorkItem, - IN WORK_QUEUE_TYPE QueueType); + _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem, + __drv_strictTypeMatch(__drv_typeExpr) _In_ WORK_QUEUE_TYPE QueueType); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseStatus( - IN NTSTATUS Status); + _In_ NTSTATUS Status); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PVOID NTAPI ExRegisterCallback( - IN PCALLBACK_OBJECT CallbackObject, - IN PCALLBACK_FUNCTION CallbackFunction, - IN PVOID CallbackContext OPTIONAL); + _Inout_ PCALLBACK_OBJECT CallbackObject, + _In_ PCALLBACK_FUNCTION CallbackFunction, + _In_opt_ PVOID CallbackContext); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExReinitializeResourceLite( - IN OUT PERESOURCE Resource); + _Inout_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Requires_lock_held_(_Global_critical_region_) NTKERNELAPI VOID NTAPI ExReleaseResourceForThreadLite( - IN OUT PERESOURCE Resource, - IN ERESOURCE_THREAD ResourceThreadId); + _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) + PERESOURCE Resource, + _In_ ERESOURCE_THREAD ResourceThreadId); +_Requires_lock_held_(_Global_critical_region_) +_Requires_lock_held_(*Resource) +_Releases_lock_(*Resource) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID FASTCALL ExReleaseResourceLite( - IN OUT PERESOURCE Resource); + _Inout_ PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExSetResourceOwnerPointer( - IN OUT PERESOURCE Resource, - IN PVOID OwnerPointer); + _Inout_ PERESOURCE Resource, + _In_ PVOID OwnerPointer); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI ULONG NTAPI ExSetTimerResolution( - IN ULONG DesiredTime, - IN BOOLEAN SetResolution); + _In_ ULONG DesiredTime, + _In_ BOOLEAN SetResolution); NTKERNELAPI VOID NTAPI ExSystemTimeToLocalTime( - IN PLARGE_INTEGER SystemTime, - OUT PLARGE_INTEGER LocalTime); + _In_ PLARGE_INTEGER SystemTime, + _Out_ PLARGE_INTEGER LocalTime); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExUnregisterCallback( - IN OUT PVOID CbRegistration); + _Inout_ PVOID CbRegistration); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_Must_inspect_result_ +_Post_satisfies_(return == 0 || return == 1) NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + _Inout_ PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExInitializeRundownProtection( - OUT PEX_RUNDOWN_REF RunRef); + _Out_ PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExReInitializeRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + _Inout_ PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtection( - IN OUT PEX_RUNDOWN_REF RunRef); + _Inout_ PEX_RUNDOWN_REF RunRef); NTKERNELAPI VOID FASTCALL ExRundownCompleted( - OUT PEX_RUNDOWN_REF RunRef); + _Out_ PEX_RUNDOWN_REF RunRef); NTKERNELAPI BOOLEAN NTAPI ExVerifySuite( - IN SUITE_TYPE SuiteType); + __drv_strictTypeMatch(__drv_typeExpr) _In_ SUITE_TYPE SuiteType); NTKERNELAPI VOID FASTCALL ExWaitForRundownProtectionRelease( - IN OUT PEX_RUNDOWN_REF RunRef); + _Inout_ PEX_RUNDOWN_REF RunRef); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ #if (NTDDI_VERSION >= NTDDI_WINXPSP2) +_Must_inspect_result_ +_Post_satisfies_(return == 0 || return == 1) NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionEx( - IN OUT PEX_RUNDOWN_REF RunRef, - IN ULONG Count); + _Inout_ PEX_RUNDOWN_REF RunRef, + _In_ ULONG Count); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionEx( - IN OUT PEX_RUNDOWN_REF RunRef, - IN ULONG Count); + _Inout_ PEX_RUNDOWN_REF RunRef, + _In_ ULONG Count); #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ #if (NTDDI_VERSION >= NTDDI_WS03SP1) +_Must_inspect_result_ +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI PEX_RUNDOWN_REF_CACHE_AWARE NTAPI ExAllocateCacheAwareRundownProtection( - IN POOL_TYPE PoolType, - IN ULONG PoolTag); + __drv_strictTypeMatch(__drv_typeExpr) _In_ POOL_TYPE PoolType, + _In_ ULONG PoolTag); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI SIZE_T NTAPI ExSizeOfRundownProtectionCacheAware(VOID); +_IRQL_requires_max_(APC_LEVEL) +_Acquires_lock_(_Global_critical_region_) NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceShared( - IN OUT PERESOURCE Resource); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_) + PERESOURCE Resource); +_IRQL_requires_max_(APC_LEVEL) +_Acquires_lock_(_Global_critical_region_) NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceExclusive( - IN OUT PERESOURCE Resource); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_) + PERESOURCE Resource); +_IRQL_requires_max_(APC_LEVEL) +_Acquires_lock_(_Global_critical_region_) NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( - IN OUT PERESOURCE Resource); + _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_lock_(*_Curr_) + PERESOURCE Resource); +_IRQL_requires_max_(DISPATCH_LEVEL) +_Releases_lock_(_Global_critical_region_) NTKERNELAPI VOID FASTCALL ExReleaseResourceAndLeaveCriticalRegion( - IN OUT PERESOURCE Resource); + _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) + PERESOURCE Resource); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExInitializeRundownProtectionCacheAware( - OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, - IN SIZE_T RunRefSize); + _Out_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, + _In_ SIZE_T RunRefSize); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ExFreeCacheAwareRundownProtection( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); +_Must_inspect_result_ +_Post_satisfies_(return == 0 || return == 1) NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); +_Must_inspect_result_ +_Post_satisfies_(return == 0 || return == 1) NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionCacheAwareEx( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, - IN ULONG Count); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, + _In_ ULONG Count); NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionCacheAwareEx( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef, - IN ULONG Count); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRef, + _In_ ULONG Count); NTKERNELAPI VOID @@ -13997,47 +14961,52 @@ NTKERNELAPI VOID FASTCALL ExReInitializeRundownProtectionCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); NTKERNELAPI VOID FASTCALL ExRundownCompletedCacheAware( - IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); + _Inout_ PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware); #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ExInitializeLookasideListEx( - OUT PLOOKASIDE_LIST_EX Lookaside, - IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL, - IN PFREE_FUNCTION_EX Free OPTIONAL, - IN POOL_TYPE PoolType, - IN ULONG Flags, - IN SIZE_T Size, - IN ULONG Tag, - IN USHORT Depth); + _Out_ PLOOKASIDE_LIST_EX Lookaside, + _In_opt_ PALLOCATE_FUNCTION_EX Allocate, + _In_opt_ PFREE_FUNCTION_EX Free, + _In_ POOL_TYPE PoolType, + _In_ ULONG Flags, + _In_ SIZE_T Size, + _In_ ULONG Tag, + _In_ USHORT Depth); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExDeleteLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside); + _Inout_ PLOOKASIDE_LIST_EX Lookaside); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExFlushLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside); + _Inout_ PLOOKASIDE_LIST_EX Lookaside); +_Must_inspect_result_ +_IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE PVOID ExAllocateFromLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside) + _Inout_ PLOOKASIDE_LIST_EX Lookaside) { PVOID Entry; @@ -14064,11 +15033,12 @@ ExAllocateFromLookasideListEx( return Entry; } +_IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE VOID ExFreeToLookasideListEx( - IN OUT PLOOKASIDE_LIST_EX Lookaside, - IN PVOID Entry) + _Inout_ PLOOKASIDE_LIST_EX Lookaside, + _In_ PVOID Entry) { Lookaside->L.TotalFrees += 1; if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { @@ -14084,21 +15054,23 @@ ExFreeToLookasideListEx( #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI VOID NTAPI ExSetResourceOwnerPointerEx( - IN OUT PERESOURCE Resource, - IN PVOID OwnerPointer, - IN ULONG Flags); + _Inout_ PERESOURCE Resource, + _In_ PVOID OwnerPointer, + _In_ ULONG Flags); #define FLAG_OWNER_POINTER_IS_THREAD 0x1 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ +_IRQL_requires_max_(DISPATCH_LEVEL) static __inline PVOID ExAllocateFromNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside) + _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside) { PVOID Entry; @@ -14133,10 +15105,11 @@ ExAllocateFromNPagedLookasideList( return Entry; } +_IRQL_requires_max_(DISPATCH_LEVEL) static __inline VOID ExFreeToNPagedLookasideList( - IN OUT PNPAGED_LOOKASIDE_LIST Lookaside, - IN PVOID Entry) + _Inout_ PNPAGED_LOOKASIDE_LIST Lookaside, + _In_ PVOID Entry) { Lookaside->L.TotalFrees++; #ifdef NONAMELESSUNION @@ -14173,54 +15146,60 @@ ExFreeToNPagedLookasideList( ******************************************************************************/ #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG_PTR FASTCALL ObfDereferenceObject( - IN PVOID Object); + _In_ PVOID Object); #define ObDereferenceObject ObfDereferenceObject +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI ObGetObjectSecurity( - IN PVOID Object, - OUT PSECURITY_DESCRIPTOR *SecurityDescriptor, - OUT PBOOLEAN MemoryAllocated); + _In_ PVOID Object, + _Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor, + _Out_ PBOOLEAN MemoryAllocated); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG_PTR FASTCALL ObfReferenceObject( - IN PVOID Object); + _In_ PVOID Object); #define ObReferenceObject ObfReferenceObject +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByHandle( - IN HANDLE Handle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - OUT PVOID *Object, - OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); + _In_ HANDLE Handle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode, + _Out_ PVOID *Object, + _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByPointer( - IN PVOID Object, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode); + _In_ PVOID Object, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode); +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI VOID NTAPI ObReleaseObjectSecurity( - IN PSECURITY_DESCRIPTOR SecurityDescriptor, - IN BOOLEAN MemoryAllocated); + _In_ PSECURITY_DESCRIPTOR SecurityDescriptor, + _In_ BOOLEAN MemoryAllocated); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_VISTA) @@ -14228,7 +15207,7 @@ NTKERNELAPI VOID NTAPI ObDereferenceObjectDeferDelete( - IN PVOID Object); + _In_ PVOID Object); #endif #if (NTDDI_VERSION >= NTDDI_VISTASP1) @@ -14236,14 +15215,14 @@ NTKERNELAPI NTSTATUS NTAPI ObRegisterCallbacks( - IN POB_CALLBACK_REGISTRATION CallbackRegistration, - OUT PVOID *RegistrationHandle); + _In_ POB_CALLBACK_REGISTRATION CallbackRegistration, + _Outptr_ PVOID *RegistrationHandle); NTKERNELAPI VOID NTAPI ObUnRegisterCallbacks( - IN PVOID RegistrationHandle); + _In_ PVOID RegistrationHandle); NTKERNELAPI USHORT @@ -14253,48 +15232,52 @@ ObGetFilterVersion(VOID); #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByHandleWithTag( - IN HANDLE Handle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Tag, - OUT PVOID *Object, - OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); + _In_ HANDLE Handle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode, + _In_ ULONG Tag, + _Out_ PVOID *Object, + _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG_PTR FASTCALL ObfReferenceObjectWithTag( - IN PVOID Object, - IN ULONG Tag); + _In_ PVOID Object, + _In_ ULONG Tag); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByPointerWithTag( - IN PVOID Object, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_TYPE ObjectType OPTIONAL, - IN KPROCESSOR_MODE AccessMode, - IN ULONG Tag); + _In_ PVOID Object, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_TYPE ObjectType, + _In_ KPROCESSOR_MODE AccessMode, + _In_ ULONG Tag); +_IRQL_requires_max_(DISPATCH_LEVEL) NTKERNELAPI LONG_PTR FASTCALL ObfDereferenceObjectWithTag( - IN PVOID Object, - IN ULONG Tag); + _In_ PVOID Object, + _In_ ULONG Tag); NTKERNELAPI VOID NTAPI ObDereferenceObjectDeferDeleteWithTag( - IN PVOID Object, - IN ULONG Tag); + _In_ PVOID Object, + _In_ ULONG Tag); #define ObDereferenceObject ObfDereferenceObject #define ObReferenceObject ObfReferenceObject @@ -14310,8 +15293,8 @@ NTKERNELAPI NTSTATUS NTAPI PsWrapApcWow64Thread( - IN OUT PVOID *ApcContext, - IN OUT PVOID *ApcRoutine); + _Inout_ PVOID *ApcContext, + _Inout_ PVOID *ApcRoutine); /* * PEPROCESS @@ -14321,6 +15304,7 @@ PsWrapApcWow64Thread( #if !defined(_PSGETCURRENTTHREAD_) #define _PSGETCURRENTTHREAD_ +_IRQL_requires_max_(DISPATCH_LEVEL) FORCEINLINE PETHREAD NTAPI @@ -14333,23 +15317,27 @@ PsGetCurrentThread(VOID) #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(APC_LEVEL) +_Post_satisfies_(return <= 0) +_Must_inspect_result_ NTKERNELAPI NTSTATUS NTAPI PsCreateSystemThread( - OUT PHANDLE ThreadHandle, - IN ULONG DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN HANDLE ProcessHandle OPTIONAL, - OUT PCLIENT_ID ClientId OPTIONAL, - IN PKSTART_ROUTINE StartRoutine, - IN PVOID StartContext OPTIONAL); + _Out_ PHANDLE ThreadHandle, + _In_ ULONG DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ HANDLE ProcessHandle, + _Out_opt_ PCLIENT_ID ClientId, + _In_ PKSTART_ROUTINE StartRoutine, + _In_opt_ _When_(return==0, __drv_aliasesMem) PVOID StartContext); +_IRQL_requires_max_(PASSIVE_LEVEL) NTKERNELAPI NTSTATUS NTAPI PsTerminateSystemThread( - IN NTSTATUS ExitStatus); + _In_ NTSTATUS ExitStatus); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ @@ -14360,41 +15348,44 @@ PsTerminateSystemThread( #ifdef RUN_WPP #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(HIGH_LEVEL) NTKERNELAPI NTSTATUS __cdecl WmiTraceMessage( - IN TRACEHANDLE LoggerHandle, - IN ULONG MessageFlags, - IN LPGUID MessageGuid, - IN USHORT MessageNumber, - IN ...); + _In_ TRACEHANDLE LoggerHandle, + _In_ ULONG MessageFlags, + _In_ LPGUID MessageGuid, + _In_ USHORT MessageNumber, + ...); #endif #endif /* RUN_WPP */ #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI WmiQueryTraceInformation( - IN TRACE_INFORMATION_CLASS TraceInformationClass, - OUT PVOID TraceInformation, - IN ULONG TraceInformationLength, - OUT PULONG RequiredLength OPTIONAL, - IN PVOID Buffer OPTIONAL); + _In_ TRACE_INFORMATION_CLASS TraceInformationClass, + _Out_writes_bytes_(TraceInformationLength) PVOID TraceInformation, + _In_ ULONG TraceInformationLength, + _Out_opt_ PULONG RequiredLength, + _In_opt_ PVOID Buffer); #if 0 /* FIXME: Get va_list from where? */ +_IRQL_requires_max_(HIGH_LEVEL) NTKERNELAPI NTSTATUS NTAPI WmiTraceMessageVa( - IN TRACEHANDLE LoggerHandle, - IN ULONG MessageFlags, - IN LPGUID MessageGuid, - IN USHORT MessageNumber, - IN va_list MessageArgList); + _In_ TRACEHANDLE LoggerHandle, + _In_ ULONG MessageFlags, + _In_ LPGUID MessageGuid, + _In_ USHORT MessageNumber, + _In_ va_list MessageArgList); #endif #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -14402,15 +15393,16 @@ WmiTraceMessageVa( #ifndef TRACE_INFORMATION_CLASS_DEFINE #if (NTDDI_VERSION >= NTDDI_WINXP) +_IRQL_requires_max_(APC_LEVEL) NTKERNELAPI NTSTATUS NTAPI WmiQueryTraceInformation( - IN TRACE_INFORMATION_CLASS TraceInformationClass, - OUT PVOID TraceInformation, - IN ULONG TraceInformationLength, - OUT PULONG RequiredLength OPTIONAL, - IN PVOID Buffer OPTIONAL); + _In_ TRACE_INFORMATION_CLASS TraceInformationClass, + _Out_writes_bytes_(TraceInformationLength) PVOID TraceInformation, + _In_ ULONG TraceInformationLength, + _Out_opt_ PULONG RequiredLength, + _In_opt_ PVOID Buffer); #endif #define TRACE_INFORMATION_CLASS_DEFINE @@ -14419,89 +15411,99 @@ WmiQueryTraceInformation( #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwRegister( - IN LPCGUID ProviderId, - IN PETWENABLECALLBACK EnableCallback OPTIONAL, - IN PVOID CallbackContext OPTIONAL, - OUT PREGHANDLE RegHandle); + _In_ LPCGUID ProviderId, + _In_opt_ PETWENABLECALLBACK EnableCallback, + _In_opt_ PVOID CallbackContext, + _Out_ PREGHANDLE RegHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwUnregister( - IN REGHANDLE RegHandle); + _In_ REGHANDLE RegHandle); +_IRQL_requires_max_(HIGH_LEVEL) BOOLEAN NTKERNELAPI NTAPI EtwEventEnabled( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor); + _In_ REGHANDLE RegHandle, + _In_ PCEVENT_DESCRIPTOR EventDescriptor); +_IRQL_requires_max_(HIGH_LEVEL) BOOLEAN NTKERNELAPI NTAPI EtwProviderEnabled( - IN REGHANDLE RegHandle, - IN UCHAR Level, - IN ULONGLONG Keyword); + _In_ REGHANDLE RegHandle, + _In_ UCHAR Level, + _In_ ULONGLONG Keyword); +_When_(ControlCode==EVENT_ACTIVITY_CTRL_CREATE_ID, _IRQL_requires_max_(HIGH_LEVEL)) +_When_(ControlCode!=EVENT_ACTIVITY_CTRL_CREATE_ID, _IRQL_requires_max_(APC_LEVEL)) NTSTATUS NTKERNELAPI NTAPI EtwActivityIdControl( - IN ULONG ControlCode, - IN OUT LPGUID ActivityId); + _In_ ULONG ControlCode, + _Inout_updates_bytes_(sizeof(GUID)) LPGUID ActivityId); +_IRQL_requires_max_(HIGH_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwWrite( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN LPCGUID ActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); + _In_ REGHANDLE RegHandle, + _In_ PCEVENT_DESCRIPTOR EventDescriptor, + _In_opt_ LPCGUID ActivityId, + _In_ ULONG UserDataCount, + _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); +_IRQL_requires_max_(HIGH_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwWriteTransfer( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN LPCGUID ActivityId OPTIONAL, - IN LPCGUID RelatedActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); + _In_ REGHANDLE RegHandle, + _In_ PCEVENT_DESCRIPTOR EventDescriptor, + _In_opt_ LPCGUID ActivityId, + _In_opt_ LPCGUID RelatedActivityId, + _In_ ULONG UserDataCount, + _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); +_IRQL_requires_max_(HIGH_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwWriteString( - IN REGHANDLE RegHandle, - IN UCHAR Level, - IN ULONGLONG Keyword, - IN LPCGUID ActivityId OPTIONAL, - IN PCWSTR String); + _In_ REGHANDLE RegHandle, + _In_ UCHAR Level, + _In_ ULONGLONG Keyword, + _In_opt_ LPCGUID ActivityId, + _In_ PCWSTR String); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(HIGH_LEVEL) NTSTATUS NTKERNELAPI NTAPI EtwWriteEx( - IN REGHANDLE RegHandle, - IN PCEVENT_DESCRIPTOR EventDescriptor, - IN ULONG64 Filter, - IN ULONG Flags, - IN LPCGUID ActivityId OPTIONAL, - IN LPCGUID RelatedActivityId OPTIONAL, - IN ULONG UserDataCount, - IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL); + _In_ REGHANDLE RegHandle, + _In_ PCEVENT_DESCRIPTOR EventDescriptor, + _In_ ULONG64 Filter, + _In_ ULONG Flags, + _In_opt_ LPCGUID ActivityId, + _In_opt_ LPCGUID RelatedActivityId, + _In_ ULONG UserDataCount, + _In_reads_opt_(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData); #endif @@ -14515,16 +15517,16 @@ EtwWriteEx( ULONG __cdecl DbgPrint( - IN PCSTR Format, - IN ...); + _In_z_ _Printf_format_string_ PCSTR Format, + ...); #if (NTDDI_VERSION >= NTDDI_WIN2K) NTSYSAPI ULONG __cdecl DbgPrintReturnControlC( - IN PCCH Format, - IN ...); + _In_z_ _Printf_format_string_ PCCH Format, + ...); #endif #if (NTDDI_VERSION >= NTDDI_WINXP) @@ -14533,10 +15535,10 @@ NTSYSAPI ULONG __cdecl DbgPrintEx( - IN ULONG ComponentId, - IN ULONG Level, - IN PCSTR Format, - IN ...); + _In_ ULONG ComponentId, + _In_ ULONG Level, + _In_z_ _Printf_format_string_ PCSTR Format, + ...); #ifdef _VA_LIST_DEFINED @@ -14544,20 +15546,20 @@ NTSYSAPI ULONG NTAPI vDbgPrintEx( - IN ULONG ComponentId, - IN ULONG Level, - IN PCCH Format, - IN va_list ap); + _In_ ULONG ComponentId, + _In_ ULONG Level, + _In_z_ PCCH Format, + _In_ va_list ap); NTSYSAPI ULONG NTAPI vDbgPrintExWithPrefix( - IN PCCH Prefix, - IN ULONG ComponentId, - IN ULONG Level, - IN PCCH Format, - IN va_list ap); + _In_z_ PCCH Prefix, + _In_ ULONG ComponentId, + _In_ ULONG Level, + _In_z_ PCCH Format, + _In_ va_list ap); #endif /* _VA_LIST_DEFINED */ @@ -14565,16 +15567,16 @@ NTSYSAPI NTSTATUS NTAPI DbgQueryDebugFilterState( - IN ULONG ComponentId, - IN ULONG Level); + _In_ ULONG ComponentId, + _In_ ULONG Level); NTSYSAPI NTSTATUS NTAPI DbgSetDebugFilterState( - IN ULONG ComponentId, - IN ULONG Level, - IN BOOLEAN State); + _In_ ULONG ComponentId, + _In_ ULONG Level, + _In_ BOOLEAN State); #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ @@ -14582,16 +15584,16 @@ DbgSetDebugFilterState( typedef VOID (*PDEBUG_PRINT_CALLBACK)( - IN PSTRING Output, - IN ULONG ComponentId, - IN ULONG Level); + _In_ PSTRING Output, + _In_ ULONG ComponentId, + _In_ ULONG Level); NTSYSAPI NTSTATUS NTAPI DbgSetDebugPrintCallback( - IN PDEBUG_PRINT_CALLBACK DebugPrintCallback, - IN BOOLEAN Enable); + _In_ PDEBUG_PRINT_CALLBACK DebugPrintCallback, + _In_ BOOLEAN Enable); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ @@ -14655,11 +15657,13 @@ KdEnableDebugger(VOID); #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK) #define DbgBreakPoint __debugbreak #else +__analysis_noreturn VOID NTAPI DbgBreakPoint(VOID); #endif +__analysis_noreturn NTSYSAPI VOID NTAPI @@ -14680,12 +15684,12 @@ NTKERNELAPI NTSTATUS NTAPI KdChangeOption( - IN KD_OPTION Option, - IN ULONG InBufferBytes OPTIONAL, - IN PVOID InBuffer, - IN ULONG OutBufferBytes OPTIONAL, - OUT PVOID OutBuffer, - OUT PULONG OutBufferNeeded OPTIONAL); + _In_ KD_OPTION Option, + _In_opt_ ULONG InBufferBytes, + _In_ PVOID InBuffer, + _In_opt_ ULONG OutBufferBytes, + _Out_ PVOID OutBuffer, + _Out_opt_ PULONG OutBufferNeeded); #endif /* Hardware Abstraction Layer Functions */ @@ -14693,14 +15697,15 @@ KdChangeOption( #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) +__drv_preferredFunction("AllocateCommonBuffer","Obsolete") FORCEINLINE PVOID NTAPI HalAllocateCommonBuffer( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ ULONG Length, + _Out_ PPHYSICAL_ADDRESS LogicalAddress, + _In_ BOOLEAN CacheEnabled) { PALLOCATE_COMMON_BUFFER allocateCommonBuffer; PVOID commonBuffer; @@ -14711,15 +15716,16 @@ HalAllocateCommonBuffer( return commonBuffer; } +__drv_preferredFunction("FreeCommonBuffer","Obsolete") FORCEINLINE VOID NTAPI HalFreeCommonBuffer( - IN PDMA_ADAPTER DmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled) + _In_ PDMA_ADAPTER DmaAdapter, + _In_ ULONG Length, + _In_ PHYSICAL_ADDRESS LogicalAddress, + _In_ PVOID VirtualAddress, + _In_ BOOLEAN CacheEnabled) { PFREE_COMMON_BUFFER freeCommonBuffer; @@ -14728,11 +15734,12 @@ HalFreeCommonBuffer( freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled ); } +__drv_preferredFunction("ReadDmaCounter","Obsolete") FORCEINLINE ULONG NTAPI HalReadDmaCounter( - IN PDMA_ADAPTER DmaAdapter) + _In_ PDMA_ADAPTER DmaAdapter) { PREAD_DMA_COUNTER readDmaCounter; ULONG counter; @@ -14746,7 +15753,7 @@ HalReadDmaCounter( FORCEINLINE ULONG HalGetDmaAlignment( - IN PDMA_ADAPTER DmaAdapter) + _In_ PDMA_ADAPTER DmaAdapter) { PGET_DMA_ALIGNMENT getDmaAlignment; ULONG alignment; @@ -14761,7 +15768,6 @@ HalGetDmaAlignment( #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ - #ifndef _NTTMAPI_ #define _NTTMAPI_ @@ -14918,7 +15924,7 @@ typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION { typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION { ULONG LogPathLength; - WCHAR LogPath[1]; + _Field_size_(LogPathLength) WCHAR LogPath[1]; } TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION; typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION { @@ -15029,385 +16035,488 @@ typedef struct _TRANSACTION_LIST_INFORMATION { typedef NTSTATUS (NTAPI *PFN_NT_CREATE_TRANSACTION)( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG IsolationLevel OPTIONAL, - IN ULONG IsolationFlags OPTIONAL, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ LPGUID Uow, + _In_opt_ HANDLE TmHandle, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG IsolationLevel, + _In_opt_ ULONG IsolationFlags, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PUNICODE_STRING Description); typedef NTSTATUS (NTAPI *PFN_NT_OPEN_TRANSACTION)( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ LPGUID Uow, + _In_opt_ HANDLE TmHandle); typedef NTSTATUS (NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - OUT PVOID TransactionInformation, - IN ULONG TransactionInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength, + _Out_opt_ PULONG ReturnLength); typedef NTSTATUS (NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - IN PVOID TransactionInformation, - IN ULONG TransactionInformationLength); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _In_ PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength); typedef NTSTATUS (NTAPI *PFN_NT_COMMIT_TRANSACTION)( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); typedef NTSTATUS (NTAPI *PFN_NT_ROLLBACK_TRANSACTION)( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); #if (NTDDI_VERSION >= NTDDI_VISTA) +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG CommitStrength OPTIONAL); + _Out_ PHANDLE TmHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PUNICODE_STRING LogFileName, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG CommitStrength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN LPGUID TmIdentity OPTIONAL, - IN ULONG OpenOptions OPTIONAL); + _Out_ PHANDLE TmHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PUNICODE_STRING LogFileName, + _In_opt_ LPGUID TmIdentity, + _In_opt_ ULONG OpenOptions); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRenameTransactionManager( - IN PUNICODE_STRING LogFileName, - IN LPGUID ExistingTransactionManagerGuid); + _In_ PUNICODE_STRING LogFileName, + _In_ LPGUID ExistingTransactionManagerGuid); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRollforwardTransactionManager( - IN HANDLE TransactionManagerHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE TransactionManagerHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRecoverTransactionManager( - IN HANDLE TransactionManagerHandle); + _In_ HANDLE TransactionManagerHandle); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationTransactionManager( - IN HANDLE TransactionManagerHandle, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - OUT PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength, - OUT PULONG ReturnLength); + _In_ HANDLE TransactionManagerHandle, + _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, + _Out_writes_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, + _In_ ULONG TransactionManagerInformationLength, + _Out_ PULONG ReturnLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationTransactionManager( - IN HANDLE TmHandle OPTIONAL, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - IN PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength); + _In_opt_ HANDLE TmHandle, + _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, + _In_reads_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, + _In_ ULONG TransactionManagerInformationLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtEnumerateTransactionObject( - IN HANDLE RootObjectHandle OPTIONAL, - IN KTMOBJECT_TYPE QueryType, - IN OUT PKTMOBJECT_CURSOR ObjectCursor, - IN ULONG ObjectCursorLength, - OUT PULONG ReturnLength); + _In_opt_ HANDLE RootObjectHandle, + _In_ KTMOBJECT_TYPE QueryType, + _Inout_updates_bytes_(ObjectCursorLength) PKTMOBJECT_CURSOR ObjectCursor, + _In_ ULONG ObjectCursorLength, + _Out_ PULONG ReturnLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG IsolationLevel OPTIONAL, - IN ULONG IsolationFlags OPTIONAL, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ LPGUID Uow, + _In_opt_ HANDLE TmHandle, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG IsolationLevel, + _In_opt_ ULONG IsolationFlags, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PUNICODE_STRING Description); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN LPGUID Uow, - IN HANDLE TmHandle OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ LPGUID Uow, + _In_opt_ HANDLE TmHandle); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - OUT PVOID TransactionInformation, - IN ULONG TransactionInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength, + _Out_opt_ PULONG ReturnLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - IN PVOID TransactionInformation, - IN ULONG TransactionInformationLength); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _In_reads_bytes_(TransactionInformationLength) PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCommitTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRollbackTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE ResourceManagerHandle, - IN HANDLE TransactionHandle, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN NOTIFICATION_MASK NotificationMask, - IN PVOID EnlistmentKey OPTIONAL); + _Out_ PHANDLE EnlistmentHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE ResourceManagerHandle, + _In_ HANDLE TransactionHandle, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_ NOTIFICATION_MASK NotificationMask, + _In_opt_ PVOID EnlistmentKey); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE ResourceManagerHandle, - IN LPGUID EnlistmentGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); + _Out_ PHANDLE EnlistmentHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE ResourceManagerHandle, + _In_ LPGUID EnlistmentGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationEnlistment( - IN HANDLE EnlistmentHandle, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - OUT PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength, - OUT PULONG ReturnLength); + _In_ HANDLE EnlistmentHandle, + _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, + _Out_writes_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, + _In_ ULONG EnlistmentInformationLength, + _Out_ PULONG ReturnLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationEnlistment( - IN HANDLE EnlistmentHandle OPTIONAL, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - IN PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength); + _In_opt_ HANDLE EnlistmentHandle, + _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, + _In_reads_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, + _In_ ULONG EnlistmentInformationLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRecoverEnlistment( - IN HANDLE EnlistmentHandle, - IN PVOID EnlistmentKey OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PVOID EnlistmentKey); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrePrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCommitEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRollbackEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrePrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCommitComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtReadOnlyEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRollbackComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSinglePhaseReject( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtCreateResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID RmGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); + _Out_ PHANDLE ResourceManagerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE TmHandle, + _In_ LPGUID RmGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_opt_ PUNICODE_STRING Description); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtOpenResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID ResourceManagerGuid OPTIONAL, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); + _Out_ PHANDLE ResourceManagerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE TmHandle, + _In_opt_ LPGUID ResourceManagerGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRecoverResourceManager( - IN HANDLE ResourceManagerHandle); + _In_ HANDLE ResourceManagerHandle); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtGetNotificationResourceManager( - IN HANDLE ResourceManagerHandle, - OUT PTRANSACTION_NOTIFICATION TransactionNotification, - IN ULONG NotificationLength, - IN PLARGE_INTEGER Timeout OPTIONAL, - OUT PULONG ReturnLength OPTIONAL, - IN ULONG Asynchronous, - IN ULONG_PTR AsynchronousContext OPTIONAL); + _In_ HANDLE ResourceManagerHandle, + _Out_ PTRANSACTION_NOTIFICATION TransactionNotification, + _In_ ULONG NotificationLength, + _In_opt_ PLARGE_INTEGER Timeout, + _Out_opt_ PULONG ReturnLength, + _In_ ULONG Asynchronous, + _In_opt_ ULONG_PTR AsynchronousContext); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - OUT PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE ResourceManagerHandle, + _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, + _Out_writes_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, + _In_ ULONG ResourceManagerInformationLength, + _Out_opt_ PULONG ReturnLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - IN PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength); + _In_ HANDLE ResourceManagerHandle, + _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, + _In_reads_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, + _In_ ULONG ResourceManagerInformationLength); +_Must_inspect_result_ +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtRegisterProtocolAddressInformation( - IN HANDLE ResourceManager, - IN PCRM_PROTOCOL_ID ProtocolId, - IN ULONG ProtocolInformationSize, - IN PVOID ProtocolInformation, - IN ULONG CreateOptions OPTIONAL); + _In_ HANDLE ResourceManager, + _In_ PCRM_PROTOCOL_ID ProtocolId, + _In_ ULONG ProtocolInformationSize, + _In_ PVOID ProtocolInformation, + _In_opt_ ULONG CreateOptions); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPropagationComplete( - IN HANDLE ResourceManagerHandle, - IN ULONG RequestCookie, - IN ULONG BufferLength, - IN PVOID Buffer); + _In_ HANDLE ResourceManagerHandle, + _In_ ULONG RequestCookie, + _In_ ULONG BufferLength, + _In_ PVOID Buffer); +_IRQL_requires_max_ (APC_LEVEL) +__kernel_entry NTSYSCALLAPI NTSTATUS NTAPI NtPropagationFailed( - IN HANDLE ResourceManagerHandle, - IN ULONG RequestCookie, - IN NTSTATUS PropStatus); + _In_ HANDLE ResourceManagerHandle, + _In_ ULONG RequestCookie, + _In_ NTSTATUS PropStatus); #endif /* NTDDI_VERSION >= NTDDI_VISTA */ @@ -15426,592 +16535,663 @@ NtPropagationFailed( #if (NTDDI_VERSION >= NTDDI_WIN2K) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwClose( - IN HANDLE Handle); + _In_ HANDLE Handle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject( - OUT PHANDLE DirectoryHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE DirectoryHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwCreateFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PLARGE_INTEGER AllocationSize OPTIONAL, - IN ULONG FileAttributes, - IN ULONG ShareAccess, - IN ULONG CreateDisposition, - IN ULONG CreateOptions, - IN PVOID EaBuffer OPTIONAL, - IN ULONG EaLength); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_opt_ PLARGE_INTEGER AllocationSize, + _In_ ULONG FileAttributes, + _In_ ULONG ShareAccess, + _In_ ULONG CreateDisposition, + _In_ ULONG CreateOptions, + _In_reads_bytes_opt_(EaLength) PVOID EaBuffer, + _In_ ULONG EaLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwCreateKey( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ULONG TitleIndex, - IN PUNICODE_STRING Class OPTIONAL, - IN ULONG CreateOptions, - OUT PULONG Disposition OPTIONAL); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Reserved_ ULONG TitleIndex, + _In_opt_ PUNICODE_STRING Class, + _In_ ULONG CreateOptions, + _Out_opt_ PULONG Disposition); +_IRQL_requires_max_(APC_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwCreateSection( - OUT PHANDLE SectionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PLARGE_INTEGER MaximumSize OPTIONAL, - IN ULONG SectionPageProtection, - IN ULONG AllocationAttributes, - IN HANDLE FileHandle OPTIONAL); + _Out_ PHANDLE SectionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PLARGE_INTEGER MaximumSize, + _In_ ULONG SectionPageProtection, + _In_ ULONG AllocationAttributes, + _In_opt_ HANDLE FileHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDeleteKey( - IN HANDLE KeyHandle); + _In_ HANDLE KeyHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwDeleteValueKey( - IN HANDLE KeyHandle, - IN PUNICODE_STRING ValueName); + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(Length == 0, _Post_satisfies_(return < 0)) +_When_(Length > 0, _Post_satisfies_(return <= 0)) NTSYSAPI NTSTATUS NTAPI ZwEnumerateKey( - IN HANDLE KeyHandle, - IN ULONG Index, - IN KEY_INFORMATION_CLASS KeyInformationClass, - OUT PVOID KeyInformation OPTIONAL, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE KeyHandle, + _In_ ULONG Index, + _In_ KEY_INFORMATION_CLASS KeyInformationClass, + _Out_writes_bytes_opt_(Length) PVOID KeyInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(Length == 0, _Post_satisfies_(return < 0)) +_When_(Length > 0, _Post_satisfies_(return <= 0)) NTSYSAPI NTSTATUS NTAPI ZwEnumerateValueKey( - IN HANDLE KeyHandle, - IN ULONG Index, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - OUT PVOID KeyValueInformation OPTIONAL, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE KeyHandle, + _In_ ULONG Index, + _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + _Out_writes_bytes_opt_(Length) PVOID KeyValueInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwFlushKey( - IN HANDLE KeyHandle); + _In_ HANDLE KeyHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwLoadDriver( - IN PUNICODE_STRING DriverServiceName); + _In_ PUNICODE_STRING DriverServiceName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwMakeTemporaryObject( - IN HANDLE Handle); + _In_ HANDLE Handle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwMapViewOfSection( - IN HANDLE SectionHandle, - IN HANDLE ProcessHandle, - IN OUT PVOID *BaseAddress, - IN ULONG_PTR ZeroBits, - IN SIZE_T CommitSize, - IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, - IN OUT PSIZE_T ViewSize, - IN SECTION_INHERIT InheritDisposition, - IN ULONG AllocationType, - IN ULONG Protect); + _In_ HANDLE SectionHandle, + _In_ HANDLE ProcessHandle, + _Outptr_result_bytebuffer_(*ViewSize) PVOID *BaseAddress, + _In_ ULONG_PTR ZeroBits, + _In_ SIZE_T CommitSize, + _Inout_opt_ PLARGE_INTEGER SectionOffset, + _Inout_ PSIZE_T ViewSize, + _In_ SECTION_INHERIT InheritDisposition, + _In_ ULONG AllocationType, + _In_ ULONG Protect); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenFile( - OUT PHANDLE FileHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN ULONG ShareAccess, - IN ULONG OpenOptions); + _Out_ PHANDLE FileHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG ShareAccess, + _In_ ULONG OpenOptions); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenKey( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenSection( - OUT PHANDLE SectionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE SectionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject( - OUT PHANDLE LinkHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE LinkHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(Length == 0, _Post_satisfies_(return < 0)) +_When_(Length > 0, _Post_satisfies_(return <= 0)) NTSYSAPI NTSTATUS NTAPI ZwQueryKey( - IN HANDLE KeyHandle, - IN KEY_INFORMATION_CLASS KeyInformationClass, - OUT PVOID KeyInformation OPTIONAL, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE KeyHandle, + _In_ KEY_INFORMATION_CLASS KeyInformationClass, + _Out_writes_bytes_opt_(Length) PVOID KeyInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQuerySymbolicLinkObject( - IN HANDLE LinkHandle, - IN OUT PUNICODE_STRING LinkTarget, - OUT PULONG ReturnedLength OPTIONAL); + _In_ HANDLE LinkHandle, + _Inout_ PUNICODE_STRING LinkTarget, + _Out_opt_ PULONG ReturnedLength); +_IRQL_requires_max_(PASSIVE_LEVEL) +_When_(Length == 0, _Post_satisfies_(return < 0)) +_When_(Length > 0, _Post_satisfies_(return <= 0)) NTSYSAPI NTSTATUS NTAPI ZwQueryValueKey( - IN HANDLE KeyHandle, - IN PUNICODE_STRING ValueName, - IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, - OUT PVOID KeyValueInformation OPTIONAL, - IN ULONG Length, - OUT PULONG ResultLength); + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName, + _In_ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + _Out_writes_bytes_opt_(Length) PVOID KeyValueInformation, + _In_ ULONG Length, + _Out_ PULONG ResultLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwReadFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - OUT PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _Out_writes_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetInformationFile( - IN HANDLE FileHandle, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID FileInformation, - IN ULONG Length, - IN FILE_INFORMATION_CLASS FileInformationClass); + _In_ HANDLE FileHandle, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID FileInformation, + _In_ ULONG Length, + _In_ FILE_INFORMATION_CLASS FileInformationClass); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetValueKey( - IN HANDLE KeyHandle, - IN PUNICODE_STRING ValueName, - IN ULONG TitleIndex OPTIONAL, - IN ULONG Type, - IN PVOID Data OPTIONAL, - IN ULONG DataSize); + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING ValueName, + _In_opt_ ULONG TitleIndex, + _In_ ULONG Type, + _In_reads_bytes_opt_(DataSize) PVOID Data, + _In_ ULONG DataSize); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwUnloadDriver( - IN PUNICODE_STRING DriverServiceName); + _In_ PUNICODE_STRING DriverServiceName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwUnmapViewOfSection( - IN HANDLE ProcessHandle, - IN PVOID BaseAddress OPTIONAL); + _In_ HANDLE ProcessHandle, + _In_opt_ PVOID BaseAddress); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwWriteFile( - IN HANDLE FileHandle, - IN HANDLE Event OPTIONAL, - IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, - IN PVOID ApcContext OPTIONAL, - OUT PIO_STATUS_BLOCK IoStatusBlock, - IN PVOID Buffer, - IN ULONG Length, - IN PLARGE_INTEGER ByteOffset OPTIONAL, - IN PULONG Key OPTIONAL); + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_reads_bytes_(Length) PVOID Buffer, + _In_ ULONG Length, + _In_opt_ PLARGE_INTEGER ByteOffset, + _In_opt_ PULONG Key); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwQueryFullAttributesFile( - IN POBJECT_ATTRIBUTES ObjectAttributes, - OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation); + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Out_ PFILE_NETWORK_OPEN_INFORMATION FileInformation); #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ #if (NTDDI_VERSION >= NTDDI_WS03) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwOpenEvent( - OUT PHANDLE EventHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes); + _Out_ PHANDLE EventHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes); #endif #if (NTDDI_VERSION >= NTDDI_VISTA) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS ZwCreateKeyTransacted( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ULONG TitleIndex, - IN PUNICODE_STRING Class OPTIONAL, - IN ULONG CreateOptions, - IN HANDLE TransactionHandle, - OUT PULONG Disposition OPTIONAL); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _Reserved_ ULONG TitleIndex, + _In_opt_ PUNICODE_STRING Class, + _In_ ULONG CreateOptions, + _In_ HANDLE TransactionHandle, + _Out_opt_ PULONG Disposition); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenKeyTransacted( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN HANDLE TransactionHandle); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ HANDLE TransactionHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCreateTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG CommitStrength OPTIONAL); + _Out_ PHANDLE TmHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PUNICODE_STRING LogFileName, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG CommitStrength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwOpenTransactionManager( - OUT PHANDLE TmHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN PUNICODE_STRING LogFileName OPTIONAL, - IN LPGUID TmIdentity OPTIONAL, - IN ULONG OpenOptions OPTIONAL); + _Out_ PHANDLE TmHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ PUNICODE_STRING LogFileName, + _In_opt_ LPGUID TmIdentity, + _In_opt_ ULONG OpenOptions); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRollforwardTransactionManager( - IN HANDLE TransactionManagerHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE TransactionManagerHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRecoverTransactionManager( - IN HANDLE TransactionManagerHandle); + _In_ HANDLE TransactionManagerHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwQueryInformationTransactionManager( - IN HANDLE TransactionManagerHandle, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - OUT PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE TransactionManagerHandle, + _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, + _Out_writes_bytes_(TransactionManagerInformationLength) PVOID TransactionManagerInformation, + _In_ ULONG TransactionManagerInformationLength, + _Out_opt_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwSetInformationTransactionManager( - IN HANDLE TmHandle, - IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, - IN PVOID TransactionManagerInformation, - IN ULONG TransactionManagerInformationLength); + _In_ HANDLE TmHandle, + _In_ TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass, + _In_ PVOID TransactionManagerInformation, + _In_ ULONG TransactionManagerInformationLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwEnumerateTransactionObject( - IN HANDLE RootObjectHandle OPTIONAL, - IN KTMOBJECT_TYPE QueryType, - IN OUT PKTMOBJECT_CURSOR ObjectCursor, - IN ULONG ObjectCursorLength, - OUT PULONG ReturnLength); + _In_opt_ HANDLE RootObjectHandle, + _In_ KTMOBJECT_TYPE QueryType, + _Inout_updates_bytes_(ObjectCursorLength) PKTMOBJECT_CURSOR ObjectCursor, + _In_ ULONG ObjectCursorLength, + _Out_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCreateTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow OPTIONAL, - IN HANDLE TmHandle OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN ULONG IsolationLevel OPTIONAL, - IN ULONG IsolationFlags OPTIONAL, - IN PLARGE_INTEGER Timeout OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ LPGUID Uow, + _In_opt_ HANDLE TmHandle, + _In_opt_ ULONG CreateOptions, + _In_opt_ ULONG IsolationLevel, + _In_opt_ ULONG IsolationFlags, + _In_opt_ PLARGE_INTEGER Timeout, + _In_opt_ PUNICODE_STRING Description); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwOpenTransaction( - OUT PHANDLE TransactionHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN LPGUID Uow, - IN HANDLE TmHandle OPTIONAL); + _Out_ PHANDLE TransactionHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ LPGUID Uow, + _In_opt_ HANDLE TmHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwQueryInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - OUT PVOID TransactionInformation, - IN ULONG TransactionInformationLength, - OUT PULONG ReturnLength OPTIONAL); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _Out_writes_bytes_(TransactionInformationLength) PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength, + _Out_opt_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwSetInformationTransaction( - IN HANDLE TransactionHandle, - IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass, - IN PVOID TransactionInformation, - IN ULONG TransactionInformationLength); + _In_ HANDLE TransactionHandle, + _In_ TRANSACTION_INFORMATION_CLASS TransactionInformationClass, + _In_ PVOID TransactionInformation, + _In_ ULONG TransactionInformationLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCommitTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRollbackTransaction( - IN HANDLE TransactionHandle, - IN BOOLEAN Wait); + _In_ HANDLE TransactionHandle, + _In_ BOOLEAN Wait); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCreateResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID ResourceManagerGuid OPTIONAL, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN PUNICODE_STRING Description OPTIONAL); + _Out_ PHANDLE ResourceManagerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE TmHandle, + _In_opt_ LPGUID ResourceManagerGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_opt_ PUNICODE_STRING Description); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwOpenResourceManager( - OUT PHANDLE ResourceManagerHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE TmHandle, - IN LPGUID ResourceManagerGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); + _Out_ PHANDLE ResourceManagerHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE TmHandle, + _In_ LPGUID ResourceManagerGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRecoverResourceManager( - IN HANDLE ResourceManagerHandle); + _In_ HANDLE ResourceManagerHandle); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwGetNotificationResourceManager( - IN HANDLE ResourceManagerHandle, - OUT PTRANSACTION_NOTIFICATION TransactionNotification, - IN ULONG NotificationLength, - IN PLARGE_INTEGER Timeout, - IN PULONG ReturnLength OPTIONAL, - IN ULONG Asynchronous, - IN ULONG_PTR AsynchronousContext OPTIONAL); + _In_ HANDLE ResourceManagerHandle, + _Out_ PTRANSACTION_NOTIFICATION TransactionNotification, + _In_ ULONG NotificationLength, + _In_ PLARGE_INTEGER Timeout, + _Out_opt_ PULONG ReturnLength, + _In_ ULONG Asynchronous, + _In_opt_ ULONG_PTR AsynchronousContext); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwQueryInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - OUT PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength, - IN PULONG ReturnLength OPTIONAL); + _In_ HANDLE ResourceManagerHandle, + _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, + _Out_writes_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, + _In_ ULONG ResourceManagerInformationLength, + _Out_opt_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwSetInformationResourceManager( - IN HANDLE ResourceManagerHandle, - IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, - IN PVOID ResourceManagerInformation, - IN ULONG ResourceManagerInformationLength); + _In_ HANDLE ResourceManagerHandle, + _In_ RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass, + _In_reads_bytes_(ResourceManagerInformationLength) PVOID ResourceManagerInformation, + _In_ ULONG ResourceManagerInformationLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCreateEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE ResourceManagerHandle, - IN HANDLE TransactionHandle, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, - IN ULONG CreateOptions OPTIONAL, - IN NOTIFICATION_MASK NotificationMask, - IN PVOID EnlistmentKey OPTIONAL); + _Out_ PHANDLE EnlistmentHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE ResourceManagerHandle, + _In_ HANDLE TransactionHandle, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_opt_ ULONG CreateOptions, + _In_ NOTIFICATION_MASK NotificationMask, + _In_opt_ PVOID EnlistmentKey); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwOpenEnlistment( - OUT PHANDLE EnlistmentHandle, - IN ACCESS_MASK DesiredAccess, - IN HANDLE RmHandle, - IN LPGUID EnlistmentGuid, - IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL); + _Out_ PHANDLE EnlistmentHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ HANDLE RmHandle, + _In_ LPGUID EnlistmentGuid, + _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwQueryInformationEnlistment( - IN HANDLE EnlistmentHandle, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - OUT PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength, - IN PULONG ReturnLength OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, + _Out_writes_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, + _In_ ULONG EnlistmentInformationLength, + _Out_opt_ PULONG ReturnLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwSetInformationEnlistment( - IN HANDLE EnlistmentHandle, - IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, - IN PVOID EnlistmentInformation, - IN ULONG EnlistmentInformationLength); + _In_ HANDLE EnlistmentHandle, + _In_ ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass, + _In_reads_bytes_(EnlistmentInformationLength) PVOID EnlistmentInformation, + _In_ ULONG EnlistmentInformationLength); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRecoverEnlistment( - IN HANDLE EnlistmentHandle, - IN PVOID EnlistmentKey OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PVOID EnlistmentKey); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwPrePrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwPrepareEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCommitEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwRollbackEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwPrePrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwPrepareComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwCommitComplete( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSCALLAPI NTSTATUS NTAPI ZwReadOnlyEnlistment( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); NTSYSCALLAPI NTSTATUS @@ -16024,29 +17204,31 @@ NTSYSCALLAPI NTSTATUS NTAPI ZwSinglePhaseReject( - IN HANDLE EnlistmentHandle, - IN PLARGE_INTEGER TmVirtualClock OPTIONAL); + _In_ HANDLE EnlistmentHandle, + _In_opt_ PLARGE_INTEGER TmVirtualClock); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ #if (NTDDI_VERSION >= NTDDI_WIN7) +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenKeyEx( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ULONG OpenOptions); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ ULONG OpenOptions); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwOpenKeyTransactedEx( - OUT PHANDLE KeyHandle, - IN ACCESS_MASK DesiredAccess, - IN POBJECT_ATTRIBUTES ObjectAttributes, - IN ULONG OpenOptions, - IN HANDLE TransactionHandle); + _Out_ PHANDLE KeyHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ ULONG OpenOptions, + _In_ HANDLE TransactionHandle); NTSYSAPI NTSTATUS @@ -16076,21 +17258,23 @@ ZwQueryMultipleValueKey( IN OUT PULONG BufferLength, OUT PULONG RequiredBufferLength OPTIONAL); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwRenameKey( - IN HANDLE KeyHandle, - IN PUNICODE_STRING NewName); + _In_ HANDLE KeyHandle, + _In_ PUNICODE_STRING NewName); +_IRQL_requires_max_(PASSIVE_LEVEL) NTSYSAPI NTSTATUS NTAPI ZwSetInformationKey( - IN HANDLE KeyHandle, - IN KEY_SET_INFORMATION_CLASS KeySetInformationClass, - IN PVOID KeySetInformation, - IN ULONG KeySetInformationLength); + _In_ HANDLE KeyHandle, + _In_ __drv_strictTypeMatch(__drv_typeConst) KEY_SET_INFORMATION_CLASS KeySetInformationClass, + _In_reads_bytes_(KeySetInformationLength) PVOID KeySetInformation, + _In_ ULONG KeySetInformationLength); #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */