Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygeniotypes.h
Go to the documentation of this file.
00001 $if (_WDMDDK_ || _NTDDK_) 00002 /****************************************************************************** 00003 * I/O Manager Types * 00004 ******************************************************************************/ 00005 $endif (_WDMDDK_ || _NTDDK_) 00006 00007 $if (_WDMDDK_) 00008 00009 #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS 00010 00011 #define CONNECT_FULLY_SPECIFIED 0x1 00012 #define CONNECT_LINE_BASED 0x2 00013 #define CONNECT_MESSAGE_BASED 0x3 00014 #define CONNECT_FULLY_SPECIFIED_GROUP 0x4 00015 #define CONNECT_CURRENT_VERSION 0x4 00016 00017 #define POOL_COLD_ALLOCATION 256 00018 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8 00019 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16 00020 00021 #define IO_TYPE_ADAPTER 1 00022 #define IO_TYPE_CONTROLLER 2 00023 #define IO_TYPE_DEVICE 3 00024 #define IO_TYPE_DRIVER 4 00025 #define IO_TYPE_FILE 5 00026 #define IO_TYPE_IRP 6 00027 #define IO_TYPE_MASTER_ADAPTER 7 00028 #define IO_TYPE_OPEN_PACKET 8 00029 #define IO_TYPE_TIMER 9 00030 #define IO_TYPE_VPB 10 00031 #define IO_TYPE_ERROR_LOG 11 00032 #define IO_TYPE_ERROR_MESSAGE 12 00033 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13 00034 00035 #define IO_TYPE_CSQ_IRP_CONTEXT 1 00036 #define IO_TYPE_CSQ 2 00037 #define IO_TYPE_CSQ_EX 3 00038 00039 /* IO_RESOURCE_DESCRIPTOR.Option */ 00040 #define IO_RESOURCE_PREFERRED 0x01 00041 #define IO_RESOURCE_DEFAULT 0x02 00042 #define IO_RESOURCE_ALTERNATIVE 0x08 00043 00044 $endif (_WDMDDK_) 00045 $if (_WDMDDK_ || _DEVIOCTL_) 00046 #define FILE_DEVICE_BEEP 0x00000001 00047 #define FILE_DEVICE_CD_ROM 0x00000002 00048 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 00049 #define FILE_DEVICE_CONTROLLER 0x00000004 00050 #define FILE_DEVICE_DATALINK 0x00000005 00051 #define FILE_DEVICE_DFS 0x00000006 00052 #define FILE_DEVICE_DISK 0x00000007 00053 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 00054 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 00055 #define FILE_DEVICE_INPORT_PORT 0x0000000a 00056 #define FILE_DEVICE_KEYBOARD 0x0000000b 00057 #define FILE_DEVICE_MAILSLOT 0x0000000c 00058 #define FILE_DEVICE_MIDI_IN 0x0000000d 00059 #define FILE_DEVICE_MIDI_OUT 0x0000000e 00060 #define FILE_DEVICE_MOUSE 0x0000000f 00061 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 00062 #define FILE_DEVICE_NAMED_PIPE 0x00000011 00063 #define FILE_DEVICE_NETWORK 0x00000012 00064 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 00065 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 00066 #define FILE_DEVICE_NULL 0x00000015 00067 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 00068 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 00069 #define FILE_DEVICE_PRINTER 0x00000018 00070 #define FILE_DEVICE_SCANNER 0x00000019 00071 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a 00072 #define FILE_DEVICE_SERIAL_PORT 0x0000001b 00073 #define FILE_DEVICE_SCREEN 0x0000001c 00074 #define FILE_DEVICE_SOUND 0x0000001d 00075 #define FILE_DEVICE_STREAMS 0x0000001e 00076 #define FILE_DEVICE_TAPE 0x0000001f 00077 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 00078 #define FILE_DEVICE_TRANSPORT 0x00000021 00079 #define FILE_DEVICE_UNKNOWN 0x00000022 00080 #define FILE_DEVICE_VIDEO 0x00000023 00081 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 00082 #define FILE_DEVICE_WAVE_IN 0x00000025 00083 #define FILE_DEVICE_WAVE_OUT 0x00000026 00084 #define FILE_DEVICE_8042_PORT 0x00000027 00085 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 00086 #define FILE_DEVICE_BATTERY 0x00000029 00087 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a 00088 #define FILE_DEVICE_MODEM 0x0000002b 00089 #define FILE_DEVICE_VDM 0x0000002c 00090 #define FILE_DEVICE_MASS_STORAGE 0x0000002d 00091 #define FILE_DEVICE_SMB 0x0000002e 00092 #define FILE_DEVICE_KS 0x0000002f 00093 #define FILE_DEVICE_CHANGER 0x00000030 00094 #define FILE_DEVICE_SMARTCARD 0x00000031 00095 #define FILE_DEVICE_ACPI 0x00000032 00096 #define FILE_DEVICE_DVD 0x00000033 00097 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 00098 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 00099 #define FILE_DEVICE_DFS_VOLUME 0x00000036 00100 #define FILE_DEVICE_SERENUM 0x00000037 00101 #define FILE_DEVICE_TERMSRV 0x00000038 00102 #define FILE_DEVICE_KSEC 0x00000039 00103 #define FILE_DEVICE_FIPS 0x0000003A 00104 #define FILE_DEVICE_INFINIBAND 0x0000003B 00105 #define FILE_DEVICE_VMBUS 0x0000003E 00106 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F 00107 #define FILE_DEVICE_WPD 0x00000040 00108 #define FILE_DEVICE_BLUETOOTH 0x00000041 00109 #define FILE_DEVICE_MT_COMPOSITE 0x00000042 00110 #define FILE_DEVICE_MT_TRANSPORT 0x00000043 00111 #define FILE_DEVICE_BIOMETRIC 0x00000044 00112 #define FILE_DEVICE_PMI 0x00000045 00113 00114 $endif (_WDMDDK_ || _DEVIOCTL_) 00115 $if (_WDMDDK_) 00116 #if defined(NT_PROCESSOR_GROUPS) 00117 00118 typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 00119 00120 typedef enum _IRQ_DEVICE_POLICY_USHORT { 00121 IrqPolicyMachineDefault = 0, 00122 IrqPolicyAllCloseProcessors = 1, 00123 IrqPolicyOneCloseProcessor = 2, 00124 IrqPolicyAllProcessorsInMachine = 3, 00125 IrqPolicyAllProcessorsInGroup = 3, 00126 IrqPolicySpecifiedProcessors = 4, 00127 IrqPolicySpreadMessagesAcrossAllProcessors = 5}; 00128 00129 #else /* defined(NT_PROCESSOR_GROUPS) */ 00130 00131 typedef enum _IRQ_DEVICE_POLICY { 00132 IrqPolicyMachineDefault = 0, 00133 IrqPolicyAllCloseProcessors, 00134 IrqPolicyOneCloseProcessor, 00135 IrqPolicyAllProcessorsInMachine, 00136 IrqPolicySpecifiedProcessors, 00137 IrqPolicySpreadMessagesAcrossAllProcessors 00138 } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 00139 00140 #endif 00141 00142 typedef enum _IRQ_PRIORITY { 00143 IrqPriorityUndefined = 0, 00144 IrqPriorityLow, 00145 IrqPriorityNormal, 00146 IrqPriorityHigh 00147 } IRQ_PRIORITY, *PIRQ_PRIORITY; 00148 00149 typedef enum _IRQ_GROUP_POLICY { 00150 GroupAffinityAllGroupZero = 0, 00151 GroupAffinityDontCare 00152 } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY; 00153 00154 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) 00155 00156 typedef struct _OBJECT_HANDLE_INFORMATION { 00157 ULONG HandleAttributes; 00158 ACCESS_MASK GrantedAccess; 00159 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; 00160 00161 typedef struct _CLIENT_ID { 00162 HANDLE UniqueProcess; 00163 HANDLE UniqueThread; 00164 } CLIENT_ID, *PCLIENT_ID; 00165 00166 typedef struct _VPB { 00167 CSHORT Type; 00168 CSHORT Size; 00169 USHORT Flags; 00170 USHORT VolumeLabelLength; 00171 struct _DEVICE_OBJECT *DeviceObject; 00172 struct _DEVICE_OBJECT *RealDevice; 00173 ULONG SerialNumber; 00174 ULONG ReferenceCount; 00175 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; 00176 } VPB, *PVPB; 00177 00178 typedef enum _IO_ALLOCATION_ACTION { 00179 KeepObject = 1, 00180 DeallocateObject, 00181 DeallocateObjectKeepRegisters 00182 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; 00183 00184 _Function_class_(DRIVER_CONTROL) 00185 _IRQL_requires_same_ 00186 typedef IO_ALLOCATION_ACTION 00187 (NTAPI DRIVER_CONTROL)( 00188 _In_ struct _DEVICE_OBJECT *DeviceObject, 00189 _Inout_ struct _IRP *Irp, 00190 _In_ PVOID MapRegisterBase, 00191 _In_ PVOID Context); 00192 typedef DRIVER_CONTROL *PDRIVER_CONTROL; 00193 00194 typedef struct _WAIT_CONTEXT_BLOCK { 00195 KDEVICE_QUEUE_ENTRY WaitQueueEntry; 00196 PDRIVER_CONTROL DeviceRoutine; 00197 PVOID DeviceContext; 00198 ULONG NumberOfMapRegisters; 00199 PVOID DeviceObject; 00200 PVOID CurrentIrp; 00201 PKDPC BufferChainingDpc; 00202 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; 00203 00204 $endif (_WDMDDK_) 00205 $if (_NTDDK_) 00206 /* DEVICE_OBJECT.Flags */ 00207 #define DO_DEVICE_HAS_NAME 0x00000040 00208 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 00209 #define DO_LONG_TERM_REQUESTS 0x00000200 00210 #define DO_NEVER_LAST_DEVICE 0x00000400 00211 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 00212 #define DO_SUPPORTS_TRANSACTIONS 0x00040000 00213 #define DO_FORCE_NEITHER_IO 0x00080000 00214 #define DO_VOLUME_DEVICE_OBJECT 0x00100000 00215 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 00216 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 00217 #define DO_DISALLOW_EXECUTE 0x00800000 00218 00219 $endif (_NTDDK_) 00220 $if (_WDMDDK_) 00221 /* DEVICE_OBJECT.Flags */ 00222 #define DO_VERIFY_VOLUME 0x00000002 00223 #define DO_BUFFERED_IO 0x00000004 00224 #define DO_EXCLUSIVE 0x00000008 00225 #define DO_DIRECT_IO 0x00000010 00226 #define DO_MAP_IO_BUFFER 0x00000020 00227 #define DO_DEVICE_INITIALIZING 0x00000080 00228 #define DO_SHUTDOWN_REGISTERED 0x00000800 00229 #define DO_BUS_ENUMERATED_DEVICE 0x00001000 00230 #define DO_POWER_PAGABLE 0x00002000 00231 #define DO_POWER_INRUSH 0x00004000 00232 00233 /* DEVICE_OBJECT.Characteristics */ 00234 #define FILE_REMOVABLE_MEDIA 0x00000001 00235 #define FILE_READ_ONLY_DEVICE 0x00000002 00236 #define FILE_FLOPPY_DISKETTE 0x00000004 00237 #define FILE_WRITE_ONCE_MEDIA 0x00000008 00238 #define FILE_REMOTE_DEVICE 0x00000010 00239 #define FILE_DEVICE_IS_MOUNTED 0x00000020 00240 #define FILE_VIRTUAL_VOLUME 0x00000040 00241 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 00242 #define FILE_DEVICE_SECURE_OPEN 0x00000100 00243 #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 00244 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000 00245 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000 00246 00247 /* DEVICE_OBJECT.AlignmentRequirement */ 00248 #define FILE_BYTE_ALIGNMENT 0x00000000 00249 #define FILE_WORD_ALIGNMENT 0x00000001 00250 #define FILE_LONG_ALIGNMENT 0x00000003 00251 #define FILE_QUAD_ALIGNMENT 0x00000007 00252 #define FILE_OCTA_ALIGNMENT 0x0000000f 00253 #define FILE_32_BYTE_ALIGNMENT 0x0000001f 00254 #define FILE_64_BYTE_ALIGNMENT 0x0000003f 00255 #define FILE_128_BYTE_ALIGNMENT 0x0000007f 00256 #define FILE_256_BYTE_ALIGNMENT 0x000000ff 00257 #define FILE_512_BYTE_ALIGNMENT 0x000001ff 00258 00259 $endif (_NTDDK_) 00260 $if (_WDMDDK_ || _DEVIOCTL_) 00261 /* DEVICE_OBJECT.DeviceType */ 00262 #define DEVICE_TYPE ULONG 00263 00264 $endif (_WDMDDK_ || _DEVIOCTL_) 00265 $if (_WDMDDK_) 00266 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { 00267 CSHORT Type; 00268 USHORT Size; 00269 LONG ReferenceCount; 00270 struct _DRIVER_OBJECT *DriverObject; 00271 struct _DEVICE_OBJECT *NextDevice; 00272 struct _DEVICE_OBJECT *AttachedDevice; 00273 struct _IRP *CurrentIrp; 00274 PIO_TIMER Timer; 00275 ULONG Flags; 00276 ULONG Characteristics; 00277 volatile PVPB Vpb; 00278 PVOID DeviceExtension; 00279 DEVICE_TYPE DeviceType; 00280 CCHAR StackSize; 00281 union { 00282 LIST_ENTRY ListEntry; 00283 WAIT_CONTEXT_BLOCK Wcb; 00284 } Queue; 00285 ULONG AlignmentRequirement; 00286 KDEVICE_QUEUE DeviceQueue; 00287 KDPC Dpc; 00288 ULONG ActiveThreadCount; 00289 PSECURITY_DESCRIPTOR SecurityDescriptor; 00290 KEVENT DeviceLock; 00291 USHORT SectorSize; 00292 USHORT Spare1; 00293 struct _DEVOBJ_EXTENSION *DeviceObjectExtension; 00294 PVOID Reserved; 00295 } DEVICE_OBJECT, *PDEVICE_OBJECT; 00296 00297 typedef enum _IO_SESSION_STATE { 00298 IoSessionStateCreated = 1, 00299 IoSessionStateInitialized, 00300 IoSessionStateConnected, 00301 IoSessionStateDisconnected, 00302 IoSessionStateDisconnectedLoggedOn, 00303 IoSessionStateLoggedOn, 00304 IoSessionStateLoggedOff, 00305 IoSessionStateTerminated, 00306 IoSessionStateMax 00307 } IO_SESSION_STATE, *PIO_SESSION_STATE; 00308 00309 typedef enum _IO_COMPLETION_ROUTINE_RESULT { 00310 ContinueCompletion = STATUS_CONTINUE_COMPLETION, 00311 StopCompletion = STATUS_MORE_PROCESSING_REQUIRED 00312 } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT; 00313 00314 typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY { 00315 PHYSICAL_ADDRESS MessageAddress; 00316 KAFFINITY TargetProcessorSet; 00317 PKINTERRUPT InterruptObject; 00318 ULONG MessageData; 00319 ULONG Vector; 00320 KIRQL Irql; 00321 KINTERRUPT_MODE Mode; 00322 KINTERRUPT_POLARITY Polarity; 00323 } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY; 00324 00325 typedef struct _IO_INTERRUPT_MESSAGE_INFO { 00326 KIRQL UnifiedIrql; 00327 ULONG MessageCount; 00328 IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1]; 00329 } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO; 00330 00331 typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS { 00332 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 00333 _Out_ PKINTERRUPT *InterruptObject; 00334 _In_ PKSERVICE_ROUTINE ServiceRoutine; 00335 _In_ PVOID ServiceContext; 00336 _In_opt_ PKSPIN_LOCK SpinLock; 00337 _In_ KIRQL SynchronizeIrql; 00338 _In_ BOOLEAN FloatingSave; 00339 _In_ BOOLEAN ShareVector; 00340 _In_ ULONG Vector; 00341 _In_ KIRQL Irql; 00342 _In_ KINTERRUPT_MODE InterruptMode; 00343 _In_ KAFFINITY ProcessorEnableMask; 00344 _In_ USHORT Group; 00345 } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS; 00346 00347 typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS { 00348 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 00349 _Out_ PKINTERRUPT *InterruptObject; 00350 _In_ PKSERVICE_ROUTINE ServiceRoutine; 00351 _In_ PVOID ServiceContext; 00352 _In_opt_ PKSPIN_LOCK SpinLock; 00353 _In_opt_ KIRQL SynchronizeIrql; 00354 _In_ BOOLEAN FloatingSave; 00355 } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS; 00356 00357 typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS { 00358 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 00359 union { 00360 _Out_ PVOID *Generic; 00361 _Out_ PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable; 00362 _Out_ PKINTERRUPT *InterruptObject; 00363 } ConnectionContext; 00364 _In_ PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine; 00365 _In_ PVOID ServiceContext; 00366 _In_opt_ PKSPIN_LOCK SpinLock; 00367 _In_opt_ KIRQL SynchronizeIrql; 00368 _In_ BOOLEAN FloatingSave; 00369 _In_opt_ PKSERVICE_ROUTINE FallBackServiceRoutine; 00370 } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS; 00371 00372 typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS { 00373 _Inout_ ULONG Version; 00374 _ANONYMOUS_UNION union { 00375 IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified; 00376 IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased; 00377 IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased; 00378 } DUMMYUNIONNAME; 00379 } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS; 00380 00381 typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS { 00382 _In_ ULONG Version; 00383 union { 00384 _In_ PVOID Generic; 00385 _In_ PKINTERRUPT InterruptObject; 00386 _In_ PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable; 00387 } ConnectionContext; 00388 } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS; 00389 00390 typedef enum _IO_ACCESS_TYPE { 00391 ReadAccess, 00392 WriteAccess, 00393 ModifyAccess 00394 } IO_ACCESS_TYPE; 00395 00396 typedef enum _IO_ACCESS_MODE { 00397 SequentialAccess, 00398 RandomAccess 00399 } IO_ACCESS_MODE; 00400 00401 typedef enum _IO_CONTAINER_NOTIFICATION_CLASS { 00402 IoSessionStateNotification, 00403 IoMaxContainerNotificationClass 00404 } IO_CONTAINER_NOTIFICATION_CLASS; 00405 00406 typedef struct _IO_SESSION_STATE_NOTIFICATION { 00407 ULONG Size; 00408 ULONG Flags; 00409 PVOID IoObject; 00410 ULONG EventMask; 00411 PVOID Context; 00412 } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION; 00413 00414 typedef enum _IO_CONTAINER_INFORMATION_CLASS { 00415 IoSessionStateInformation, 00416 IoMaxContainerInformationClass 00417 } IO_CONTAINER_INFORMATION_CLASS; 00418 00419 typedef struct _IO_SESSION_STATE_INFORMATION { 00420 ULONG SessionId; 00421 IO_SESSION_STATE SessionState; 00422 BOOLEAN LocalSession; 00423 } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION; 00424 00425 #if (NTDDI_VERSION >= NTDDI_WIN7) 00426 00427 typedef NTSTATUS 00428 (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)( 00429 VOID); 00430 00431 typedef NTSTATUS 00432 (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( 00433 _In_ PVOID SessionObject, 00434 _In_ PVOID IoObject, 00435 _In_ ULONG Event, 00436 _In_ PVOID Context, 00437 _In_reads_bytes_opt_(PayloadLength) PVOID NotificationPayload, 00438 _In_ ULONG PayloadLength); 00439 00440 typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION; 00441 00442 #endif 00443 00444 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; 00445 00446 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { 00447 BOOLEAN Removed; 00448 BOOLEAN Reserved[3]; 00449 volatile LONG IoCount; 00450 KEVENT RemoveEvent; 00451 } IO_REMOVE_LOCK_COMMON_BLOCK; 00452 00453 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { 00454 LONG Signature; 00455 LONG HighWatermark; 00456 LONGLONG MaxLockedTicks; 00457 LONG AllocateTag; 00458 LIST_ENTRY LockList; 00459 KSPIN_LOCK Spin; 00460 volatile LONG LowMemoryCount; 00461 ULONG Reserved1[4]; 00462 PVOID Reserved2; 00463 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; 00464 } IO_REMOVE_LOCK_DBG_BLOCK; 00465 00466 typedef struct _IO_REMOVE_LOCK { 00467 IO_REMOVE_LOCK_COMMON_BLOCK Common; 00468 #if DBG 00469 IO_REMOVE_LOCK_DBG_BLOCK Dbg; 00470 #endif 00471 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; 00472 00473 typedef struct _IO_WORKITEM *PIO_WORKITEM; 00474 00475 _Function_class_(IO_WORKITEM_ROUTINE) 00476 _IRQL_requires_(PASSIVE_LEVEL) 00477 _IRQL_requires_same_ 00478 typedef VOID 00479 (NTAPI IO_WORKITEM_ROUTINE)( 00480 _In_ PDEVICE_OBJECT DeviceObject, 00481 _In_opt_ PVOID Context); 00482 typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; 00483 00484 typedef VOID 00485 (NTAPI IO_WORKITEM_ROUTINE_EX)( 00486 _In_ PVOID IoObject, 00487 _In_opt_ PVOID Context, 00488 _In_ PIO_WORKITEM IoWorkItem); 00489 typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX; 00490 00491 typedef struct _SHARE_ACCESS { 00492 ULONG OpenCount; 00493 ULONG Readers; 00494 ULONG Writers; 00495 ULONG Deleters; 00496 ULONG SharedRead; 00497 ULONG SharedWrite; 00498 ULONG SharedDelete; 00499 } SHARE_ACCESS, *PSHARE_ACCESS; 00500 00501 /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as 00502 inheritance, even from a struct renders the type non-POD. So we use 00503 this hack */ 00504 #define PCI_COMMON_HEADER_LAYOUT \ 00505 USHORT VendorID; \ 00506 USHORT DeviceID; \ 00507 USHORT Command; \ 00508 USHORT Status; \ 00509 UCHAR RevisionID; \ 00510 UCHAR ProgIf; \ 00511 UCHAR SubClass; \ 00512 UCHAR BaseClass; \ 00513 UCHAR CacheLineSize; \ 00514 UCHAR LatencyTimer; \ 00515 UCHAR HeaderType; \ 00516 UCHAR BIST; \ 00517 union { \ 00518 struct _PCI_HEADER_TYPE_0 { \ 00519 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \ 00520 ULONG CIS; \ 00521 USHORT SubVendorID; \ 00522 USHORT SubSystemID; \ 00523 ULONG ROMBaseAddress; \ 00524 UCHAR CapabilitiesPtr; \ 00525 UCHAR Reserved1[3]; \ 00526 ULONG Reserved2; \ 00527 UCHAR InterruptLine; \ 00528 UCHAR InterruptPin; \ 00529 UCHAR MinimumGrant; \ 00530 UCHAR MaximumLatency; \ 00531 } type0; \ 00532 struct _PCI_HEADER_TYPE_1 { \ 00533 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \ 00534 UCHAR PrimaryBus; \ 00535 UCHAR SecondaryBus; \ 00536 UCHAR SubordinateBus; \ 00537 UCHAR SecondaryLatency; \ 00538 UCHAR IOBase; \ 00539 UCHAR IOLimit; \ 00540 USHORT SecondaryStatus; \ 00541 USHORT MemoryBase; \ 00542 USHORT MemoryLimit; \ 00543 USHORT PrefetchBase; \ 00544 USHORT PrefetchLimit; \ 00545 ULONG PrefetchBaseUpper32; \ 00546 ULONG PrefetchLimitUpper32; \ 00547 USHORT IOBaseUpper16; \ 00548 USHORT IOLimitUpper16; \ 00549 UCHAR CapabilitiesPtr; \ 00550 UCHAR Reserved1[3]; \ 00551 ULONG ROMBaseAddress; \ 00552 UCHAR InterruptLine; \ 00553 UCHAR InterruptPin; \ 00554 USHORT BridgeControl; \ 00555 } type1; \ 00556 struct _PCI_HEADER_TYPE_2 { \ 00557 ULONG SocketRegistersBaseAddress; \ 00558 UCHAR CapabilitiesPtr; \ 00559 UCHAR Reserved; \ 00560 USHORT SecondaryStatus; \ 00561 UCHAR PrimaryBus; \ 00562 UCHAR SecondaryBus; \ 00563 UCHAR SubordinateBus; \ 00564 UCHAR SecondaryLatency; \ 00565 struct { \ 00566 ULONG Base; \ 00567 ULONG Limit; \ 00568 } Range[PCI_TYPE2_ADDRESSES-1]; \ 00569 UCHAR InterruptLine; \ 00570 UCHAR InterruptPin; \ 00571 USHORT BridgeControl; \ 00572 } type2; \ 00573 } u; 00574 00575 typedef enum _CREATE_FILE_TYPE { 00576 CreateFileTypeNone, 00577 CreateFileTypeNamedPipe, 00578 CreateFileTypeMailslot 00579 } CREATE_FILE_TYPE; 00580 00581 #define IO_FORCE_ACCESS_CHECK 0x001 00582 #define IO_NO_PARAMETER_CHECKING 0x100 00583 00584 #define IO_REPARSE 0x0 00585 #define IO_REMOUNT 0x1 00586 00587 typedef struct _IO_STATUS_BLOCK { 00588 _ANONYMOUS_UNION union { 00589 NTSTATUS Status; 00590 PVOID Pointer; 00591 } DUMMYUNIONNAME; 00592 ULONG_PTR Information; 00593 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; 00594 00595 #if defined(_WIN64) 00596 typedef struct _IO_STATUS_BLOCK32 { 00597 NTSTATUS Status; 00598 ULONG Information; 00599 } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32; 00600 #endif 00601 00602 typedef VOID 00603 (NTAPI *PIO_APC_ROUTINE)( 00604 _In_ PVOID ApcContext, 00605 _In_ PIO_STATUS_BLOCK IoStatusBlock, 00606 _In_ ULONG Reserved); 00607 00608 #define PIO_APC_ROUTINE_DEFINED 00609 00610 typedef enum _IO_SESSION_EVENT { 00611 IoSessionEventIgnore = 0, 00612 IoSessionEventCreated, 00613 IoSessionEventTerminated, 00614 IoSessionEventConnected, 00615 IoSessionEventDisconnected, 00616 IoSessionEventLogon, 00617 IoSessionEventLogoff, 00618 IoSessionEventMax 00619 } IO_SESSION_EVENT, *PIO_SESSION_EVENT; 00620 00621 #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff 00622 #define IO_SESSION_STATE_CREATION_EVENT 0x00000001 00623 #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002 00624 #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004 00625 #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008 00626 #define IO_SESSION_STATE_LOGON_EVENT 0x00000010 00627 #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020 00628 00629 #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f 00630 00631 #define IO_SESSION_MAX_PAYLOAD_SIZE 256L 00632 00633 typedef struct _IO_SESSION_CONNECT_INFO { 00634 ULONG SessionId; 00635 BOOLEAN LocalSession; 00636 } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO; 00637 00638 #define EVENT_INCREMENT 1 00639 #define IO_NO_INCREMENT 0 00640 #define IO_CD_ROM_INCREMENT 1 00641 #define IO_DISK_INCREMENT 1 00642 #define IO_KEYBOARD_INCREMENT 6 00643 #define IO_MAILSLOT_INCREMENT 2 00644 #define IO_MOUSE_INCREMENT 6 00645 #define IO_NAMED_PIPE_INCREMENT 2 00646 #define IO_NETWORK_INCREMENT 2 00647 #define IO_PARALLEL_INCREMENT 1 00648 #define IO_SERIAL_INCREMENT 2 00649 #define IO_SOUND_INCREMENT 8 00650 #define IO_VIDEO_INCREMENT 1 00651 #define SEMAPHORE_INCREMENT 1 00652 00653 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000) 00654 00655 typedef struct _BOOTDISK_INFORMATION { 00656 LONGLONG BootPartitionOffset; 00657 LONGLONG SystemPartitionOffset; 00658 ULONG BootDeviceSignature; 00659 ULONG SystemDeviceSignature; 00660 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; 00661 00662 typedef struct _BOOTDISK_INFORMATION_EX { 00663 LONGLONG BootPartitionOffset; 00664 LONGLONG SystemPartitionOffset; 00665 ULONG BootDeviceSignature; 00666 ULONG SystemDeviceSignature; 00667 GUID BootDeviceGuid; 00668 GUID SystemDeviceGuid; 00669 BOOLEAN BootDeviceIsGpt; 00670 BOOLEAN SystemDeviceIsGpt; 00671 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; 00672 00673 #if (NTDDI_VERSION >= NTDDI_WIN7) 00674 00675 typedef struct _LOADER_PARTITION_INFORMATION_EX { 00676 ULONG PartitionStyle; 00677 ULONG PartitionNumber; 00678 _ANONYMOUS_UNION union { 00679 ULONG Signature; 00680 GUID DeviceId; 00681 } DUMMYUNIONNAME; 00682 ULONG Flags; 00683 } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX; 00684 00685 typedef struct _BOOTDISK_INFORMATION_LITE { 00686 ULONG NumberEntries; 00687 LOADER_PARTITION_INFORMATION_EX Entries[1]; 00688 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; 00689 00690 #else 00691 00692 #if (NTDDI_VERSION >= NTDDI_VISTA) 00693 typedef struct _BOOTDISK_INFORMATION_LITE { 00694 ULONG BootDeviceSignature; 00695 ULONG SystemDeviceSignature; 00696 GUID BootDeviceGuid; 00697 GUID SystemDeviceGuid; 00698 BOOLEAN BootDeviceIsGpt; 00699 BOOLEAN SystemDeviceIsGpt; 00700 } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE; 00701 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 00702 00703 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 00704 00705 #include <pshpack1.h> 00706 00707 typedef struct _EISA_MEMORY_TYPE { 00708 UCHAR ReadWrite:1; 00709 UCHAR Cached:1; 00710 UCHAR Reserved0:1; 00711 UCHAR Type:2; 00712 UCHAR Shared:1; 00713 UCHAR Reserved1:1; 00714 UCHAR MoreEntries:1; 00715 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; 00716 00717 typedef struct _EISA_MEMORY_CONFIGURATION { 00718 EISA_MEMORY_TYPE ConfigurationByte; 00719 UCHAR DataSize; 00720 USHORT AddressLowWord; 00721 UCHAR AddressHighByte; 00722 USHORT MemorySize; 00723 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; 00724 00725 typedef struct _EISA_IRQ_DESCRIPTOR { 00726 UCHAR Interrupt:4; 00727 UCHAR Reserved:1; 00728 UCHAR LevelTriggered:1; 00729 UCHAR Shared:1; 00730 UCHAR MoreEntries:1; 00731 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; 00732 00733 typedef struct _EISA_IRQ_CONFIGURATION { 00734 EISA_IRQ_DESCRIPTOR ConfigurationByte; 00735 UCHAR Reserved; 00736 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; 00737 00738 typedef struct _DMA_CONFIGURATION_BYTE0 { 00739 UCHAR Channel:3; 00740 UCHAR Reserved:3; 00741 UCHAR Shared:1; 00742 UCHAR MoreEntries:1; 00743 } DMA_CONFIGURATION_BYTE0; 00744 00745 typedef struct _DMA_CONFIGURATION_BYTE1 { 00746 UCHAR Reserved0:2; 00747 UCHAR TransferSize:2; 00748 UCHAR Timing:2; 00749 UCHAR Reserved1:2; 00750 } DMA_CONFIGURATION_BYTE1; 00751 00752 typedef struct _EISA_DMA_CONFIGURATION { 00753 DMA_CONFIGURATION_BYTE0 ConfigurationByte0; 00754 DMA_CONFIGURATION_BYTE1 ConfigurationByte1; 00755 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; 00756 00757 typedef struct _EISA_PORT_DESCRIPTOR { 00758 UCHAR NumberPorts:5; 00759 UCHAR Reserved:1; 00760 UCHAR Shared:1; 00761 UCHAR MoreEntries:1; 00762 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; 00763 00764 typedef struct _EISA_PORT_CONFIGURATION { 00765 EISA_PORT_DESCRIPTOR Configuration; 00766 USHORT PortAddress; 00767 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; 00768 00769 typedef struct _CM_EISA_SLOT_INFORMATION { 00770 UCHAR ReturnCode; 00771 UCHAR ReturnFlags; 00772 UCHAR MajorRevision; 00773 UCHAR MinorRevision; 00774 USHORT Checksum; 00775 UCHAR NumberFunctions; 00776 UCHAR FunctionInformation; 00777 ULONG CompressedId; 00778 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; 00779 00780 typedef struct _CM_EISA_FUNCTION_INFORMATION { 00781 ULONG CompressedId; 00782 UCHAR IdSlotFlags1; 00783 UCHAR IdSlotFlags2; 00784 UCHAR MinorRevision; 00785 UCHAR MajorRevision; 00786 UCHAR Selections[26]; 00787 UCHAR FunctionFlags; 00788 UCHAR TypeString[80]; 00789 EISA_MEMORY_CONFIGURATION EisaMemory[9]; 00790 EISA_IRQ_CONFIGURATION EisaIrq[7]; 00791 EISA_DMA_CONFIGURATION EisaDma[4]; 00792 EISA_PORT_CONFIGURATION EisaPort[20]; 00793 UCHAR InitializationData[60]; 00794 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; 00795 00796 #include <poppack.h> 00797 00798 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ 00799 00800 #define EISA_FUNCTION_ENABLED 0x80 00801 #define EISA_FREE_FORM_DATA 0x40 00802 #define EISA_HAS_PORT_INIT_ENTRY 0x20 00803 #define EISA_HAS_PORT_RANGE 0x10 00804 #define EISA_HAS_DMA_ENTRY 0x08 00805 #define EISA_HAS_IRQ_ENTRY 0x04 00806 #define EISA_HAS_MEMORY_ENTRY 0x02 00807 #define EISA_HAS_TYPE_ENTRY 0x01 00808 #define EISA_HAS_INFORMATION \ 00809 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ 00810 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) 00811 00812 #define EISA_MORE_ENTRIES 0x80 00813 #define EISA_SYSTEM_MEMORY 0x00 00814 #define EISA_MEMORY_TYPE_RAM 0x01 00815 00816 /* CM_EISA_SLOT_INFORMATION.ReturnCode */ 00817 00818 #define EISA_INVALID_SLOT 0x80 00819 #define EISA_INVALID_FUNCTION 0x81 00820 #define EISA_INVALID_CONFIGURATION 0x82 00821 #define EISA_EMPTY_SLOT 0x83 00822 #define EISA_INVALID_BIOS_CALL 0x86 00823 00824 /* 00825 ** Plug and Play structures 00826 */ 00827 00828 typedef VOID 00829 (NTAPI *PINTERFACE_REFERENCE)( 00830 PVOID Context); 00831 00832 typedef VOID 00833 (NTAPI *PINTERFACE_DEREFERENCE)( 00834 PVOID Context); 00835 00836 _Function_class_(TRANSLATE_BUS_ADDRESS) 00837 _IRQL_requires_same_ 00838 typedef BOOLEAN 00839 (NTAPI TRANSLATE_BUS_ADDRESS)( 00840 _Inout_opt_ PVOID Context, 00841 _In_ PHYSICAL_ADDRESS BusAddress, 00842 _In_ ULONG Length, 00843 _Out_ PULONG AddressSpace, 00844 _Out_ PPHYSICAL_ADDRESS TranslatedAddress); 00845 typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS; 00846 00847 _Function_class_(GET_DMA_ADAPTER) 00848 _IRQL_requires_same_ 00849 typedef struct _DMA_ADAPTER* 00850 (NTAPI GET_DMA_ADAPTER)( 00851 _Inout_opt_ PVOID Context, 00852 _In_ struct _DEVICE_DESCRIPTION *DeviceDescriptor, 00853 _Out_ PULONG NumberOfMapRegisters); 00854 typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER; 00855 00856 _Function_class_(GET_SET_DEVICE_DATA) 00857 _IRQL_requires_same_ 00858 typedef ULONG 00859 (NTAPI GET_SET_DEVICE_DATA)( 00860 _Inout_opt_ PVOID Context, 00861 _In_ ULONG DataType, 00862 _Inout_updates_bytes_(Length) PVOID Buffer, 00863 _In_ ULONG Offset, 00864 _In_ ULONG Length); 00865 typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA; 00866 00867 typedef enum _DEVICE_INSTALL_STATE { 00868 InstallStateInstalled, 00869 InstallStateNeedsReinstall, 00870 InstallStateFailedInstall, 00871 InstallStateFinishInstall 00872 } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE; 00873 00874 typedef struct _LEGACY_BUS_INFORMATION { 00875 GUID BusTypeGuid; 00876 INTERFACE_TYPE LegacyBusType; 00877 ULONG BusNumber; 00878 } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION; 00879 00880 typedef enum _DEVICE_REMOVAL_POLICY { 00881 RemovalPolicyExpectNoRemoval = 1, 00882 RemovalPolicyExpectOrderlyRemoval = 2, 00883 RemovalPolicyExpectSurpriseRemoval = 3 00884 } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY; 00885 00886 typedef VOID 00887 (NTAPI *PREENUMERATE_SELF)( 00888 _In_ PVOID Context); 00889 00890 typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD { 00891 USHORT Size; 00892 USHORT Version; 00893 PVOID Context; 00894 PINTERFACE_REFERENCE InterfaceReference; 00895 PINTERFACE_DEREFERENCE InterfaceDereference; 00896 PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf; 00897 } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD; 00898 00899 typedef VOID 00900 (NTAPI *PIO_DEVICE_EJECT_CALLBACK)( 00901 _In_ NTSTATUS Status, 00902 _Inout_opt_ PVOID Context); 00903 00904 #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1 00905 00906 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */ 00907 #define PCI_USE_SUBSYSTEM_IDS 0x00000001 00908 #define PCI_USE_REVISION 0x00000002 00909 #define PCI_USE_VENDEV_IDS 0x00000004 00910 #define PCI_USE_CLASS_SUBCLASS 0x00000008 00911 #define PCI_USE_PROGIF 0x00000010 00912 #define PCI_USE_LOCAL_BUS 0x00000020 00913 #define PCI_USE_LOCAL_DEVICE 0x00000040 00914 00915 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { 00916 ULONG Size; 00917 ULONG Flags; 00918 USHORT VendorID; 00919 USHORT DeviceID; 00920 UCHAR RevisionID; 00921 USHORT SubVendorID; 00922 USHORT SubSystemID; 00923 UCHAR BaseClass; 00924 UCHAR SubClass; 00925 UCHAR ProgIf; 00926 } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; 00927 00928 _IRQL_requires_max_(PASSIVE_LEVEL) 00929 _Must_inspect_result_ 00930 typedef BOOLEAN 00931 (NTAPI PCI_IS_DEVICE_PRESENT)( 00932 _In_ USHORT VendorID, 00933 _In_ USHORT DeviceID, 00934 _In_ UCHAR RevisionID, 00935 _In_ USHORT SubVendorID, 00936 _In_ USHORT SubSystemID, 00937 _In_ ULONG Flags); 00938 typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT; 00939 00940 _IRQL_requires_max_(PASSIVE_LEVEL) 00941 _Must_inspect_result_ 00942 typedef BOOLEAN 00943 (NTAPI PCI_IS_DEVICE_PRESENT_EX)( 00944 _In_ PVOID Context, 00945 _In_ PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); 00946 typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX; 00947 00948 typedef struct _BUS_INTERFACE_STANDARD { 00949 USHORT Size; 00950 USHORT Version; 00951 PVOID Context; 00952 PINTERFACE_REFERENCE InterfaceReference; 00953 PINTERFACE_DEREFERENCE InterfaceDereference; 00954 PTRANSLATE_BUS_ADDRESS TranslateBusAddress; 00955 PGET_DMA_ADAPTER GetDmaAdapter; 00956 PGET_SET_DEVICE_DATA SetBusData; 00957 PGET_SET_DEVICE_DATA GetBusData; 00958 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; 00959 00960 typedef struct _PCI_DEVICE_PRESENT_INTERFACE { 00961 USHORT Size; 00962 USHORT Version; 00963 PVOID Context; 00964 PINTERFACE_REFERENCE InterfaceReference; 00965 PINTERFACE_DEREFERENCE InterfaceDereference; 00966 PPCI_IS_DEVICE_PRESENT IsDevicePresent; 00967 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; 00968 } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; 00969 00970 _Struct_size_bytes_(Size) 00971 typedef struct _DEVICE_CAPABILITIES { 00972 _Field_range_(==, sizeof(struct _DEVICE_CAPABILITIES)) USHORT Size; 00973 USHORT Version; 00974 ULONG DeviceD1:1; 00975 ULONG DeviceD2:1; 00976 ULONG LockSupported:1; 00977 ULONG EjectSupported:1; 00978 ULONG Removable:1; 00979 ULONG DockDevice:1; 00980 ULONG UniqueID:1; 00981 ULONG SilentInstall:1; 00982 ULONG RawDeviceOK:1; 00983 ULONG SurpriseRemovalOK:1; 00984 ULONG WakeFromD0:1; 00985 ULONG WakeFromD1:1; 00986 ULONG WakeFromD2:1; 00987 ULONG WakeFromD3:1; 00988 ULONG HardwareDisabled:1; 00989 ULONG NonDynamic:1; 00990 ULONG WarmEjectSupported:1; 00991 ULONG NoDisplayInUI:1; 00992 ULONG Reserved:14; 00993 ULONG Address; 00994 ULONG UINumber; 00995 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 00996 SYSTEM_POWER_STATE SystemWake; 00997 DEVICE_POWER_STATE DeviceWake; 00998 ULONG D1Latency; 00999 ULONG D2Latency; 01000 ULONG D3Latency; 01001 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; 01002 01003 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { 01004 USHORT Version; 01005 USHORT Size; 01006 GUID Event; 01007 GUID InterfaceClassGuid; 01008 PUNICODE_STRING SymbolicLinkName; 01009 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; 01010 01011 typedef struct _HWPROFILE_CHANGE_NOTIFICATION { 01012 USHORT Version; 01013 USHORT Size; 01014 GUID Event; 01015 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; 01016 01017 #undef INTERFACE 01018 01019 typedef struct _INTERFACE { 01020 USHORT Size; 01021 USHORT Version; 01022 PVOID Context; 01023 PINTERFACE_REFERENCE InterfaceReference; 01024 PINTERFACE_DEREFERENCE InterfaceDereference; 01025 } INTERFACE, *PINTERFACE; 01026 01027 typedef struct _PLUGPLAY_NOTIFICATION_HEADER { 01028 USHORT Version; 01029 USHORT Size; 01030 GUID Event; 01031 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; 01032 01033 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; 01034 01035 /* PNP_DEVICE_STATE */ 01036 01037 #define PNP_DEVICE_DISABLED 0x00000001 01038 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 01039 #define PNP_DEVICE_FAILED 0x00000004 01040 #define PNP_DEVICE_REMOVED 0x00000008 01041 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 01042 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 01043 01044 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { 01045 USHORT Version; 01046 USHORT Size; 01047 GUID Event; 01048 struct _FILE_OBJECT *FileObject; 01049 LONG NameBufferOffset; 01050 UCHAR CustomDataBuffer[1]; 01051 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; 01052 01053 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { 01054 USHORT Version; 01055 USHORT Size; 01056 GUID Event; 01057 struct _FILE_OBJECT *FileObject; 01058 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; 01059 01060 #if (NTDDI_VERSION >= NTDDI_VISTA) 01061 #include <devpropdef.h> 01062 #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001 01063 #endif 01064 01065 #define PNP_REPLACE_NO_MAP MAXLONGLONG 01066 01067 _Must_inspect_result_ 01068 typedef NTSTATUS 01069 (NTAPI *PREPLACE_MAP_MEMORY)( 01070 _In_ PHYSICAL_ADDRESS TargetPhysicalAddress, 01071 _In_ PHYSICAL_ADDRESS SparePhysicalAddress, 01072 _Inout_ PLARGE_INTEGER NumberOfBytes, 01073 _Outptr_ PVOID *TargetAddress, 01074 _Outptr_ PVOID *SpareAddress); 01075 01076 typedef struct _PNP_REPLACE_MEMORY_LIST { 01077 ULONG AllocatedCount; 01078 ULONG Count; 01079 ULONGLONG TotalLength; 01080 struct { 01081 PHYSICAL_ADDRESS Address; 01082 ULONGLONG Length; 01083 } Ranges[ANYSIZE_ARRAY]; 01084 } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST; 01085 01086 typedef struct _PNP_REPLACE_PROCESSOR_LIST { 01087 PKAFFINITY Affinity; 01088 _Field_range_(<=, MAXIMUM_GROUPS) ULONG GroupCount; 01089 ULONG AllocatedCount; 01090 ULONG Count; 01091 ULONG ApicIds[ANYSIZE_ARRAY]; 01092 } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST; 01093 01094 typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 { 01095 KAFFINITY AffinityMask; 01096 ULONG AllocatedCount; 01097 ULONG Count; 01098 ULONG ApicIds[ANYSIZE_ARRAY]; 01099 } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1; 01100 01101 #define PNP_REPLACE_PARAMETERS_VERSION 2 01102 01103 typedef struct _PNP_REPLACE_PARAMETERS { 01104 ULONG Size; 01105 ULONG Version; 01106 ULONG64 Target; 01107 ULONG64 Spare; 01108 PPNP_REPLACE_PROCESSOR_LIST TargetProcessors; 01109 PPNP_REPLACE_PROCESSOR_LIST SpareProcessors; 01110 PPNP_REPLACE_MEMORY_LIST TargetMemory; 01111 PPNP_REPLACE_MEMORY_LIST SpareMemory; 01112 PREPLACE_MAP_MEMORY MapMemory; 01113 } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS; 01114 01115 typedef VOID 01116 (NTAPI *PREPLACE_UNLOAD)( 01117 VOID); 01118 01119 _Must_inspect_result_ 01120 typedef NTSTATUS 01121 (NTAPI *PREPLACE_BEGIN)( 01122 _In_ PPNP_REPLACE_PARAMETERS Parameters, 01123 _Outptr_ PVOID *Context); 01124 01125 _Must_inspect_result_ 01126 typedef NTSTATUS 01127 (NTAPI *PREPLACE_END)( 01128 _In_ PVOID Context); 01129 01130 _Must_inspect_result_ 01131 typedef NTSTATUS 01132 (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( 01133 _In_ PVOID Context, 01134 _In_ PHYSICAL_ADDRESS PhysicalAddress, 01135 _In_ LARGE_INTEGER ByteCount); 01136 01137 _Must_inspect_result_ 01138 typedef NTSTATUS 01139 (NTAPI *PREPLACE_SET_PROCESSOR_ID)( 01140 _In_ PVOID Context, 01141 _In_ ULONG ApicId, 01142 _In_ BOOLEAN Target); 01143 01144 _Must_inspect_result_ 01145 typedef NTSTATUS 01146 (NTAPI *PREPLACE_SWAP)( 01147 _In_ PVOID Context); 01148 01149 _Must_inspect_result_ 01150 typedef NTSTATUS 01151 (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( 01152 _In_ PVOID Context); 01153 01154 _Must_inspect_result_ 01155 typedef NTSTATUS 01156 (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( 01157 _In_ PVOID Context); 01158 01159 _Must_inspect_result_ 01160 typedef NTSTATUS 01161 (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( 01162 _In_ PVOID Context, 01163 _In_ PHYSICAL_ADDRESS SourceAddress, 01164 _Out_ PPHYSICAL_ADDRESS DestinationAddress); 01165 01166 _Must_inspect_result_ 01167 typedef NTSTATUS 01168 (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( 01169 _In_ PVOID Context, 01170 _In_ BOOLEAN Enable); 01171 01172 #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1 01173 #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \ 01174 FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror) 01175 01176 #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001 01177 #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002 01178 #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004 01179 #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008 01180 #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010 01181 01182 typedef struct _PNP_REPLACE_DRIVER_INTERFACE { 01183 ULONG Size; 01184 ULONG Version; 01185 ULONG Flags; 01186 PREPLACE_UNLOAD Unload; 01187 PREPLACE_BEGIN BeginReplace; 01188 PREPLACE_END EndReplace; 01189 PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory; 01190 PREPLACE_SET_PROCESSOR_ID SetProcessorId; 01191 PREPLACE_SWAP Swap; 01192 PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror; 01193 PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory; 01194 PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination; 01195 PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce; 01196 } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE; 01197 01198 _Must_inspect_result_ 01199 typedef NTSTATUS 01200 (NTAPI *PREPLACE_DRIVER_INIT)( 01201 _Inout_ PPNP_REPLACE_DRIVER_INTERFACE Interface, 01202 _In_ PVOID Unused); 01203 01204 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { 01205 DeviceUsageTypeUndefined, 01206 DeviceUsageTypePaging, 01207 DeviceUsageTypeHibernation, 01208 DeviceUsageTypeDumpFile 01209 } DEVICE_USAGE_NOTIFICATION_TYPE; 01210 01211 typedef struct _POWER_SEQUENCE { 01212 ULONG SequenceD1; 01213 ULONG SequenceD2; 01214 ULONG SequenceD3; 01215 } POWER_SEQUENCE, *PPOWER_SEQUENCE; 01216 01217 #ifdef _PREFAST_ 01218 #define __string_type 0x1000 01219 #define __guid_type 0x2000 01220 #define __multiString_type 0x4000 01221 #else 01222 #define __string_type 0 01223 #define __guid_type 0 01224 #define __multiString_type 0 01225 #endif 01226 01227 typedef enum { 01228 DevicePropertyDeviceDescription = 0x0 | __string_type, 01229 DevicePropertyHardwareID = 0x1 | __multiString_type, 01230 DevicePropertyCompatibleIDs = 0x2 | __multiString_type, 01231 DevicePropertyBootConfiguration = 0x3, 01232 DevicePropertyBootConfigurationTranslated = 0x4, 01233 DevicePropertyClassName = 0x5 | __string_type, 01234 DevicePropertyClassGuid = 0x6 | __string_type, 01235 DevicePropertyDriverKeyName = 0x7 | __string_type, 01236 DevicePropertyManufacturer = 0x8 | __string_type, 01237 DevicePropertyFriendlyName = 0x9 | __string_type, 01238 DevicePropertyLocationInformation = 0xa | __string_type, 01239 DevicePropertyPhysicalDeviceObjectName = 0xb | __string_type, 01240 DevicePropertyBusTypeGuid = 0xc | __guid_type, 01241 DevicePropertyLegacyBusType = 0xd, 01242 DevicePropertyBusNumber = 0xe, 01243 DevicePropertyEnumeratorName = 0xf | __string_type, 01244 DevicePropertyAddress = 0x10, 01245 DevicePropertyUINumber = 0x11, 01246 DevicePropertyInstallState = 0x12, 01247 DevicePropertyRemovalPolicy = 0x13, 01248 DevicePropertyResourceRequirements = 0x14, 01249 DevicePropertyAllocatedResources = 0x15, 01250 DevicePropertyContainerID = 0x16 | __string_type 01251 } DEVICE_REGISTRY_PROPERTY; 01252 01253 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { 01254 EventCategoryReserved, 01255 EventCategoryHardwareProfileChange, 01256 EventCategoryDeviceInterfaceChange, 01257 EventCategoryTargetDeviceChange 01258 } IO_NOTIFICATION_EVENT_CATEGORY; 01259 01260 typedef enum _IO_PRIORITY_HINT { 01261 IoPriorityVeryLow = 0, 01262 IoPriorityLow, 01263 IoPriorityNormal, 01264 IoPriorityHigh, 01265 IoPriorityCritical, 01266 MaxIoPriorityTypes 01267 } IO_PRIORITY_HINT; 01268 01269 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 01270 01271 _Function_class_(DRIVER_NOTIFICATION_CALLBACK_ROUTINE) 01272 _IRQL_requires_max_(PASSIVE_LEVEL) 01273 typedef NTSTATUS 01274 (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( 01275 _In_ PVOID NotificationStructure, 01276 _Inout_opt_ PVOID Context); 01277 typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE; 01278 01279 _Function_class_(DEVICE_CHANGE_COMPLETE_CALLBACK) 01280 _IRQL_requires_same_ 01281 typedef VOID 01282 (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( 01283 _Inout_opt_ PVOID Context); 01284 typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK; 01285 01286 typedef enum _FILE_INFORMATION_CLASS { 01287 FileDirectoryInformation = 1, 01288 FileFullDirectoryInformation, 01289 FileBothDirectoryInformation, 01290 FileBasicInformation, 01291 FileStandardInformation, 01292 FileInternalInformation, 01293 FileEaInformation, 01294 FileAccessInformation, 01295 FileNameInformation, 01296 FileRenameInformation, 01297 FileLinkInformation, 01298 FileNamesInformation, 01299 FileDispositionInformation, 01300 FilePositionInformation, 01301 FileFullEaInformation, 01302 FileModeInformation, 01303 FileAlignmentInformation, 01304 FileAllInformation, 01305 FileAllocationInformation, 01306 FileEndOfFileInformation, 01307 FileAlternateNameInformation, 01308 FileStreamInformation, 01309 FilePipeInformation, 01310 FilePipeLocalInformation, 01311 FilePipeRemoteInformation, 01312 FileMailslotQueryInformation, 01313 FileMailslotSetInformation, 01314 FileCompressionInformation, 01315 FileObjectIdInformation, 01316 FileCompletionInformation, 01317 FileMoveClusterInformation, 01318 FileQuotaInformation, 01319 FileReparsePointInformation, 01320 FileNetworkOpenInformation, 01321 FileAttributeTagInformation, 01322 FileTrackingInformation, 01323 FileIdBothDirectoryInformation, 01324 FileIdFullDirectoryInformation, 01325 FileValidDataLengthInformation, 01326 FileShortNameInformation, 01327 #if (NTDDI_VERSION >= NTDDI_VISTA) 01328 FileIoCompletionNotificationInformation, 01329 FileIoStatusBlockRangeInformation, 01330 FileIoPriorityHintInformation, 01331 FileSfioReserveInformation, 01332 FileSfioVolumeInformation, 01333 FileHardLinkInformation, 01334 FileProcessIdsUsingFileInformation, 01335 FileNormalizedNameInformation, 01336 FileNetworkPhysicalNameInformation, 01337 #endif 01338 #if (NTDDI_VERSION >= NTDDI_WIN7) 01339 FileIdGlobalTxDirectoryInformation, 01340 FileIsRemoteDeviceInformation, 01341 FileAttributeCacheInformation, 01342 FileNumaNodeInformation, 01343 FileStandardLinkInformation, 01344 FileRemoteProtocolInformation, 01345 #endif 01346 FileMaximumInformation 01347 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; 01348 01349 typedef struct _FILE_POSITION_INFORMATION { 01350 LARGE_INTEGER CurrentByteOffset; 01351 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; 01352 01353 typedef struct _FILE_BASIC_INFORMATION { 01354 LARGE_INTEGER CreationTime; 01355 LARGE_INTEGER LastAccessTime; 01356 LARGE_INTEGER LastWriteTime; 01357 LARGE_INTEGER ChangeTime; 01358 ULONG FileAttributes; 01359 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; 01360 01361 typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION { 01362 IO_PRIORITY_HINT PriorityHint; 01363 } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION; 01364 01365 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { 01366 ULONG Flags; 01367 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 01368 01369 typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION { 01370 PUCHAR IoStatusBlockRange; 01371 ULONG Length; 01372 } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION; 01373 01374 typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION { 01375 BOOLEAN IsRemote; 01376 } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION; 01377 01378 typedef struct _FILE_NUMA_NODE_INFORMATION { 01379 USHORT NodeNumber; 01380 } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION; 01381 01382 typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION { 01383 ULONG NumberOfProcessIdsInList; 01384 ULONG_PTR ProcessIdList[1]; 01385 } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION; 01386 01387 typedef struct _FILE_STANDARD_INFORMATION { 01388 LARGE_INTEGER AllocationSize; 01389 LARGE_INTEGER EndOfFile; 01390 ULONG NumberOfLinks; 01391 BOOLEAN DeletePending; 01392 BOOLEAN Directory; 01393 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; 01394 01395 typedef struct _FILE_NETWORK_OPEN_INFORMATION { 01396 LARGE_INTEGER CreationTime; 01397 LARGE_INTEGER LastAccessTime; 01398 LARGE_INTEGER LastWriteTime; 01399 LARGE_INTEGER ChangeTime; 01400 LARGE_INTEGER AllocationSize; 01401 LARGE_INTEGER EndOfFile; 01402 ULONG FileAttributes; 01403 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; 01404 01405 typedef enum _FSINFOCLASS { 01406 FileFsVolumeInformation = 1, 01407 FileFsLabelInformation, 01408 FileFsSizeInformation, 01409 FileFsDeviceInformation, 01410 FileFsAttributeInformation, 01411 FileFsControlInformation, 01412 FileFsFullSizeInformation, 01413 FileFsObjectIdInformation, 01414 FileFsDriverPathInformation, 01415 FileFsVolumeFlagsInformation, 01416 FileFsMaximumInformation 01417 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; 01418 01419 typedef struct _FILE_FS_DEVICE_INFORMATION { 01420 DEVICE_TYPE DeviceType; 01421 ULONG Characteristics; 01422 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; 01423 01424 typedef struct _FILE_FULL_EA_INFORMATION { 01425 ULONG NextEntryOffset; 01426 UCHAR Flags; 01427 UCHAR EaNameLength; 01428 USHORT EaValueLength; 01429 CHAR EaName[1]; 01430 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; 01431 01432 typedef struct _FILE_SFIO_RESERVE_INFORMATION { 01433 ULONG RequestsPerPeriod; 01434 ULONG Period; 01435 BOOLEAN RetryFailures; 01436 BOOLEAN Discardable; 01437 ULONG RequestSize; 01438 ULONG NumOutstandingRequests; 01439 } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION; 01440 01441 typedef struct _FILE_SFIO_VOLUME_INFORMATION { 01442 ULONG MaximumRequestsPerPeriod; 01443 ULONG MinimumPeriod; 01444 ULONG MinimumTransferSize; 01445 } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION; 01446 01447 #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1 01448 #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2 01449 #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4 01450 01451 #define FM_LOCK_BIT (0x1) 01452 #define FM_LOCK_BIT_V (0x0) 01453 #define FM_LOCK_WAITER_WOKEN (0x2) 01454 #define FM_LOCK_WAITER_INC (0x4) 01455 01456 _Function_class_(FAST_IO_CHECK_IF_POSSIBLE) 01457 _IRQL_requires_same_ 01458 typedef BOOLEAN 01459 (NTAPI FAST_IO_CHECK_IF_POSSIBLE)( 01460 _In_ struct _FILE_OBJECT *FileObject, 01461 _In_ PLARGE_INTEGER FileOffset, 01462 _In_ ULONG Length, 01463 _In_ BOOLEAN Wait, 01464 _In_ ULONG LockKey, 01465 _In_ BOOLEAN CheckForReadOperation, 01466 _Out_ PIO_STATUS_BLOCK IoStatus, 01467 _In_ struct _DEVICE_OBJECT *DeviceObject); 01468 typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE; 01469 01470 _Function_class_(FAST_IO_READ) 01471 _IRQL_requires_same_ 01472 typedef BOOLEAN 01473 (NTAPI FAST_IO_READ)( 01474 _In_ struct _FILE_OBJECT *FileObject, 01475 _In_ PLARGE_INTEGER FileOffset, 01476 _In_ ULONG Length, 01477 _In_ BOOLEAN Wait, 01478 _In_ ULONG LockKey, 01479 _Out_ PVOID Buffer, 01480 _Out_ PIO_STATUS_BLOCK IoStatus, 01481 _In_ struct _DEVICE_OBJECT *DeviceObject); 01482 typedef FAST_IO_READ *PFAST_IO_READ; 01483 01484 _Function_class_(FAST_IO_WRITE) 01485 _IRQL_requires_same_ 01486 typedef BOOLEAN 01487 (NTAPI FAST_IO_WRITE)( 01488 _In_ struct _FILE_OBJECT *FileObject, 01489 _In_ PLARGE_INTEGER FileOffset, 01490 _In_ ULONG Length, 01491 _In_ BOOLEAN Wait, 01492 _In_ ULONG LockKey, 01493 _In_ PVOID Buffer, 01494 _Out_ PIO_STATUS_BLOCK IoStatus, 01495 _In_ struct _DEVICE_OBJECT *DeviceObject); 01496 typedef FAST_IO_WRITE *PFAST_IO_WRITE; 01497 01498 _Function_class_(FAST_IO_QUERY_BASIC_INFO) 01499 _IRQL_requires_same_ 01500 typedef BOOLEAN 01501 (NTAPI FAST_IO_QUERY_BASIC_INFO)( 01502 _In_ struct _FILE_OBJECT *FileObject, 01503 _In_ BOOLEAN Wait, 01504 _Out_ PFILE_BASIC_INFORMATION Buffer, 01505 _Out_ PIO_STATUS_BLOCK IoStatus, 01506 _In_ struct _DEVICE_OBJECT *DeviceObject); 01507 typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO; 01508 01509 _Function_class_(FAST_IO_QUERY_STANDARD_INFO) 01510 _IRQL_requires_same_ 01511 typedef BOOLEAN 01512 (NTAPI FAST_IO_QUERY_STANDARD_INFO)( 01513 _In_ struct _FILE_OBJECT *FileObject, 01514 _In_ BOOLEAN Wait, 01515 _Out_ PFILE_STANDARD_INFORMATION Buffer, 01516 _Out_ PIO_STATUS_BLOCK IoStatus, 01517 _In_ struct _DEVICE_OBJECT *DeviceObject); 01518 typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO; 01519 01520 _Function_class_(FAST_IO_LOCK) 01521 _IRQL_requires_same_ 01522 typedef BOOLEAN 01523 (NTAPI FAST_IO_LOCK)( 01524 _In_ struct _FILE_OBJECT *FileObject, 01525 _In_ PLARGE_INTEGER FileOffset, 01526 _In_ PLARGE_INTEGER Length, 01527 _In_ PEPROCESS ProcessId, 01528 _In_ ULONG Key, 01529 _In_ BOOLEAN FailImmediately, 01530 _In_ BOOLEAN ExclusiveLock, 01531 _Out_ PIO_STATUS_BLOCK IoStatus, 01532 _In_ struct _DEVICE_OBJECT *DeviceObject); 01533 typedef FAST_IO_LOCK *PFAST_IO_LOCK; 01534 01535 _Function_class_(FAST_IO_UNLOCK_SINGLE) 01536 _IRQL_requires_same_ 01537 typedef BOOLEAN 01538 (NTAPI FAST_IO_UNLOCK_SINGLE)( 01539 _In_ struct _FILE_OBJECT *FileObject, 01540 _In_ PLARGE_INTEGER FileOffset, 01541 _In_ PLARGE_INTEGER Length, 01542 _In_ PEPROCESS ProcessId, 01543 _In_ ULONG Key, 01544 _Out_ PIO_STATUS_BLOCK IoStatus, 01545 _In_ struct _DEVICE_OBJECT *DeviceObject); 01546 typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE; 01547 01548 _Function_class_(FAST_IO_UNLOCK_ALL) 01549 _IRQL_requires_same_ 01550 typedef BOOLEAN 01551 (NTAPI FAST_IO_UNLOCK_ALL)( 01552 _In_ struct _FILE_OBJECT *FileObject, 01553 _In_ PEPROCESS ProcessId, 01554 _Out_ PIO_STATUS_BLOCK IoStatus, 01555 _In_ struct _DEVICE_OBJECT *DeviceObject); 01556 typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL; 01557 01558 _Function_class_(FAST_IO_UNLOCK_ALL_BY_KEY) 01559 _IRQL_requires_same_ 01560 typedef BOOLEAN 01561 (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( 01562 _In_ struct _FILE_OBJECT *FileObject, 01563 _In_ PVOID ProcessId, 01564 _In_ ULONG Key, 01565 _Out_ PIO_STATUS_BLOCK IoStatus, 01566 _In_ struct _DEVICE_OBJECT *DeviceObject); 01567 typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY; 01568 01569 _Function_class_(FAST_IO_DEVICE_CONTROL) 01570 _IRQL_requires_same_ 01571 typedef BOOLEAN 01572 (NTAPI FAST_IO_DEVICE_CONTROL)( 01573 _In_ struct _FILE_OBJECT *FileObject, 01574 _In_ BOOLEAN Wait, 01575 _In_opt_ PVOID InputBuffer, 01576 _In_ ULONG InputBufferLength, 01577 _Out_opt_ PVOID OutputBuffer, 01578 _In_ ULONG OutputBufferLength, 01579 _In_ ULONG IoControlCode, 01580 _Out_ PIO_STATUS_BLOCK IoStatus, 01581 _In_ struct _DEVICE_OBJECT *DeviceObject); 01582 typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL; 01583 01584 _Function_class_(FAST_IO_ACQUIRE_FILE) 01585 _IRQL_requires_same_ 01586 typedef VOID 01587 (NTAPI FAST_IO_ACQUIRE_FILE)( 01588 _In_ struct _FILE_OBJECT *FileObject); 01589 typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE; 01590 01591 _Function_class_(FAST_IO_RELEASE_FILE) 01592 _IRQL_requires_same_ 01593 typedef VOID 01594 (NTAPI FAST_IO_RELEASE_FILE)( 01595 _In_ struct _FILE_OBJECT *FileObject); 01596 typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE; 01597 01598 _Function_class_(FAST_IO_DETACH_DEVICE) 01599 _IRQL_requires_same_ 01600 typedef VOID 01601 (NTAPI FAST_IO_DETACH_DEVICE)( 01602 _In_ struct _DEVICE_OBJECT *SourceDevice, 01603 _In_ struct _DEVICE_OBJECT *TargetDevice); 01604 typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE; 01605 01606 _Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO) 01607 _IRQL_requires_same_ 01608 typedef BOOLEAN 01609 (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( 01610 _In_ struct _FILE_OBJECT *FileObject, 01611 _In_ BOOLEAN Wait, 01612 _Out_ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, 01613 _Out_ struct _IO_STATUS_BLOCK *IoStatus, 01614 _In_ struct _DEVICE_OBJECT *DeviceObject); 01615 typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO; 01616 01617 _Function_class_(FAST_IO_ACQUIRE_FOR_MOD_WRITE) 01618 _IRQL_requires_same_ 01619 typedef NTSTATUS 01620 (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( 01621 _In_ struct _FILE_OBJECT *FileObject, 01622 _In_ PLARGE_INTEGER EndingOffset, 01623 _Out_ struct _ERESOURCE **ResourceToRelease, 01624 _In_ struct _DEVICE_OBJECT *DeviceObject); 01625 typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE; 01626 01627 _Function_class_(FAST_IO_MDL_READ) 01628 _IRQL_requires_same_ 01629 typedef BOOLEAN 01630 (NTAPI FAST_IO_MDL_READ)( 01631 _In_ struct _FILE_OBJECT *FileObject, 01632 _In_ PLARGE_INTEGER FileOffset, 01633 _In_ ULONG Length, 01634 _In_ ULONG LockKey, 01635 _Out_ PMDL *MdlChain, 01636 _Out_ PIO_STATUS_BLOCK IoStatus, 01637 _In_ struct _DEVICE_OBJECT *DeviceObject); 01638 typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ; 01639 01640 _Function_class_(FAST_IO_MDL_READ_COMPLETE) 01641 _IRQL_requires_same_ 01642 typedef BOOLEAN 01643 (NTAPI FAST_IO_MDL_READ_COMPLETE)( 01644 _In_ struct _FILE_OBJECT *FileObject, 01645 _In_ PMDL MdlChain, 01646 _In_ struct _DEVICE_OBJECT *DeviceObject); 01647 typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE; 01648 01649 _Function_class_(FAST_IO_PREPARE_MDL_WRITE) 01650 _IRQL_requires_same_ 01651 typedef BOOLEAN 01652 (NTAPI FAST_IO_PREPARE_MDL_WRITE)( 01653 _In_ struct _FILE_OBJECT *FileObject, 01654 _In_ PLARGE_INTEGER FileOffset, 01655 _In_ ULONG Length, 01656 _In_ ULONG LockKey, 01657 _Out_ PMDL *MdlChain, 01658 _Out_ PIO_STATUS_BLOCK IoStatus, 01659 _In_ struct _DEVICE_OBJECT *DeviceObject); 01660 typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE; 01661 01662 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE) 01663 _IRQL_requires_same_ 01664 typedef BOOLEAN 01665 (NTAPI FAST_IO_MDL_WRITE_COMPLETE)( 01666 _In_ struct _FILE_OBJECT *FileObject, 01667 _In_ PLARGE_INTEGER FileOffset, 01668 _In_ PMDL MdlChain, 01669 _In_ struct _DEVICE_OBJECT *DeviceObject); 01670 typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE; 01671 01672 _Function_class_(FAST_IO_READ_COMPRESSED) 01673 _IRQL_requires_same_ 01674 typedef BOOLEAN 01675 (NTAPI FAST_IO_READ_COMPRESSED)( 01676 _In_ struct _FILE_OBJECT *FileObject, 01677 _In_ PLARGE_INTEGER FileOffset, 01678 _In_ ULONG Length, 01679 _In_ ULONG LockKey, 01680 _Out_ PVOID Buffer, 01681 _Out_ PMDL *MdlChain, 01682 _Out_ PIO_STATUS_BLOCK IoStatus, 01683 _Out_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 01684 _In_ ULONG CompressedDataInfoLength, 01685 _In_ struct _DEVICE_OBJECT *DeviceObject); 01686 typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED; 01687 01688 _Function_class_(FAST_IO_WRITE_COMPRESSED) 01689 _IRQL_requires_same_ 01690 typedef BOOLEAN 01691 (NTAPI FAST_IO_WRITE_COMPRESSED)( 01692 _In_ struct _FILE_OBJECT *FileObject, 01693 _In_ PLARGE_INTEGER FileOffset, 01694 _In_ ULONG Length, 01695 _In_ ULONG LockKey, 01696 _In_ PVOID Buffer, 01697 _Out_ PMDL *MdlChain, 01698 _Out_ PIO_STATUS_BLOCK IoStatus, 01699 _In_ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 01700 _In_ ULONG CompressedDataInfoLength, 01701 _In_ struct _DEVICE_OBJECT *DeviceObject); 01702 typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED; 01703 01704 _Function_class_(FAST_IO_MDL_READ_COMPLETE_COMPRESSED) 01705 _IRQL_requires_same_ 01706 typedef BOOLEAN 01707 (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( 01708 _In_ struct _FILE_OBJECT *FileObject, 01709 _In_ PMDL MdlChain, 01710 _In_ struct _DEVICE_OBJECT *DeviceObject); 01711 typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED; 01712 01713 _Function_class_(FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED) 01714 _IRQL_requires_same_ 01715 typedef BOOLEAN 01716 (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( 01717 _In_ struct _FILE_OBJECT *FileObject, 01718 _In_ PLARGE_INTEGER FileOffset, 01719 _In_ PMDL MdlChain, 01720 _In_ struct _DEVICE_OBJECT *DeviceObject); 01721 typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED; 01722 01723 _Function_class_(FAST_IO_QUERY_OPEN) 01724 _IRQL_requires_same_ 01725 typedef BOOLEAN 01726 (NTAPI FAST_IO_QUERY_OPEN)( 01727 _Inout_ struct _IRP *Irp, 01728 _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, 01729 _In_ struct _DEVICE_OBJECT *DeviceObject); 01730 typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN; 01731 01732 _Function_class_(FAST_IO_RELEASE_FOR_MOD_WRITE) 01733 _IRQL_requires_same_ 01734 typedef NTSTATUS 01735 (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( 01736 _In_ struct _FILE_OBJECT *FileObject, 01737 _In_ struct _ERESOURCE *ResourceToRelease, 01738 _In_ struct _DEVICE_OBJECT *DeviceObject); 01739 typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE; 01740 01741 _Function_class_(FAST_IO_ACQUIRE_FOR_CCFLUSH) 01742 _IRQL_requires_same_ 01743 typedef NTSTATUS 01744 (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( 01745 _In_ struct _FILE_OBJECT *FileObject, 01746 _In_ struct _DEVICE_OBJECT *DeviceObject); 01747 typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH; 01748 01749 _Function_class_(FAST_IO_RELEASE_FOR_CCFLUSH) 01750 _IRQL_requires_same_ 01751 typedef NTSTATUS 01752 (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( 01753 _In_ struct _FILE_OBJECT *FileObject, 01754 _In_ struct _DEVICE_OBJECT *DeviceObject); 01755 typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH; 01756 01757 typedef struct _FAST_IO_DISPATCH { 01758 ULONG SizeOfFastIoDispatch; 01759 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; 01760 PFAST_IO_READ FastIoRead; 01761 PFAST_IO_WRITE FastIoWrite; 01762 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; 01763 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; 01764 PFAST_IO_LOCK FastIoLock; 01765 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; 01766 PFAST_IO_UNLOCK_ALL FastIoUnlockAll; 01767 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; 01768 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; 01769 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; 01770 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; 01771 PFAST_IO_DETACH_DEVICE FastIoDetachDevice; 01772 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; 01773 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; 01774 PFAST_IO_MDL_READ MdlRead; 01775 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; 01776 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; 01777 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; 01778 PFAST_IO_READ_COMPRESSED FastIoReadCompressed; 01779 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; 01780 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; 01781 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; 01782 PFAST_IO_QUERY_OPEN FastIoQueryOpen; 01783 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; 01784 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; 01785 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; 01786 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; 01787 01788 typedef struct _SECTION_OBJECT_POINTERS { 01789 PVOID DataSectionObject; 01790 PVOID SharedCacheMap; 01791 PVOID ImageSectionObject; 01792 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; 01793 01794 typedef struct _IO_COMPLETION_CONTEXT { 01795 PVOID Port; 01796 PVOID Key; 01797 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; 01798 01799 /* FILE_OBJECT.Flags */ 01800 #define FO_FILE_OPEN 0x00000001 01801 #define FO_SYNCHRONOUS_IO 0x00000002 01802 #define FO_ALERTABLE_IO 0x00000004 01803 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 01804 #define FO_WRITE_THROUGH 0x00000010 01805 #define FO_SEQUENTIAL_ONLY 0x00000020 01806 #define FO_CACHE_SUPPORTED 0x00000040 01807 #define FO_NAMED_PIPE 0x00000080 01808 #define FO_STREAM_FILE 0x00000100 01809 #define FO_MAILSLOT 0x00000200 01810 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 01811 #define FO_QUEUE_IRP_TO_THREAD 0x00000400 01812 #define FO_DIRECT_DEVICE_OPEN 0x00000800 01813 #define FO_FILE_MODIFIED 0x00001000 01814 #define FO_FILE_SIZE_CHANGED 0x00002000 01815 #define FO_CLEANUP_COMPLETE 0x00004000 01816 #define FO_TEMPORARY_FILE 0x00008000 01817 #define FO_DELETE_ON_CLOSE 0x00010000 01818 #define FO_OPENED_CASE_SENSITIVE 0x00020000 01819 #define FO_HANDLE_CREATED 0x00040000 01820 #define FO_FILE_FAST_IO_READ 0x00080000 01821 #define FO_RANDOM_ACCESS 0x00100000 01822 #define FO_FILE_OPEN_CANCELLED 0x00200000 01823 #define FO_VOLUME_OPEN 0x00400000 01824 #define FO_REMOTE_ORIGIN 0x01000000 01825 #define FO_DISALLOW_EXCLUSIVE 0x02000000 01826 #define FO_SKIP_COMPLETION_PORT 0x02000000 01827 #define FO_SKIP_SET_EVENT 0x04000000 01828 #define FO_SKIP_SET_FAST_IO 0x08000000 01829 #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE 01830 01831 /* VPB.Flags */ 01832 #define VPB_MOUNTED 0x0001 01833 #define VPB_LOCKED 0x0002 01834 #define VPB_PERSISTENT 0x0004 01835 #define VPB_REMOVE_PENDING 0x0008 01836 #define VPB_RAW_MOUNT 0x0010 01837 #define VPB_DIRECT_WRITES_ALLOWED 0x0020 01838 01839 /* IRP.Flags */ 01840 01841 #define SL_FORCE_ACCESS_CHECK 0x01 01842 #define SL_OPEN_PAGING_FILE 0x02 01843 #define SL_OPEN_TARGET_DIRECTORY 0x04 01844 #define SL_STOP_ON_SYMLINK 0x08 01845 #define SL_CASE_SENSITIVE 0x80 01846 01847 #define SL_KEY_SPECIFIED 0x01 01848 #define SL_OVERRIDE_VERIFY_VOLUME 0x02 01849 #define SL_WRITE_THROUGH 0x04 01850 #define SL_FT_SEQUENTIAL_WRITE 0x08 01851 #define SL_FORCE_DIRECT_WRITE 0x10 01852 #define SL_REALTIME_STREAM 0x20 01853 01854 #define SL_READ_ACCESS_GRANTED 0x01 01855 #define SL_WRITE_ACCESS_GRANTED 0x04 01856 01857 #define SL_FAIL_IMMEDIATELY 0x01 01858 #define SL_EXCLUSIVE_LOCK 0x02 01859 01860 #define SL_RESTART_SCAN 0x01 01861 #define SL_RETURN_SINGLE_ENTRY 0x02 01862 #define SL_INDEX_SPECIFIED 0x04 01863 01864 #define SL_WATCH_TREE 0x01 01865 01866 #define SL_ALLOW_RAW_MOUNT 0x01 01867 01868 $endif (_WDMDDK_) 01869 $if (_WDMDDK_ || _DEVIOCTL_) 01870 #define CTL_CODE(DeviceType, Function, Method, Access) \ 01871 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 01872 01873 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) 01874 01875 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) 01876 01877 $endif (_WDMDDK_ || _DEVIOCTL_) 01878 $if (_WDMDDK_) 01879 #define IRP_NOCACHE 0x00000001 01880 #define IRP_PAGING_IO 0x00000002 01881 #define IRP_MOUNT_COMPLETION 0x00000002 01882 #define IRP_SYNCHRONOUS_API 0x00000004 01883 #define IRP_ASSOCIATED_IRP 0x00000008 01884 #define IRP_BUFFERED_IO 0x00000010 01885 #define IRP_DEALLOCATE_BUFFER 0x00000020 01886 #define IRP_INPUT_OPERATION 0x00000040 01887 #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040 01888 #define IRP_CREATE_OPERATION 0x00000080 01889 #define IRP_READ_OPERATION 0x00000100 01890 #define IRP_WRITE_OPERATION 0x00000200 01891 #define IRP_CLOSE_OPERATION 0x00000400 01892 #define IRP_DEFER_IO_COMPLETION 0x00000800 01893 #define IRP_OB_QUERY_NAME 0x00001000 01894 #define IRP_HOLD_DEVICE_QUEUE 0x00002000 01895 /* The following 2 are missing in latest WDK */ 01896 #define IRP_RETRY_IO_COMPLETION 0x00004000 01897 #define IRP_CLASS_CACHE_OPERATION 0x00008000 01898 01899 #define IRP_QUOTA_CHARGED 0x01 01900 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 01901 #define IRP_ALLOCATED_FIXED_SIZE 0x04 01902 #define IRP_LOOKASIDE_ALLOCATION 0x08 01903 01904 /* 01905 ** IRP function codes 01906 */ 01907 01908 #define IRP_MJ_CREATE 0x00 01909 #define IRP_MJ_CREATE_NAMED_PIPE 0x01 01910 #define IRP_MJ_CLOSE 0x02 01911 #define IRP_MJ_READ 0x03 01912 #define IRP_MJ_WRITE 0x04 01913 #define IRP_MJ_QUERY_INFORMATION 0x05 01914 #define IRP_MJ_SET_INFORMATION 0x06 01915 #define IRP_MJ_QUERY_EA 0x07 01916 #define IRP_MJ_SET_EA 0x08 01917 #define IRP_MJ_FLUSH_BUFFERS 0x09 01918 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a 01919 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b 01920 #define IRP_MJ_DIRECTORY_CONTROL 0x0c 01921 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d 01922 #define IRP_MJ_DEVICE_CONTROL 0x0e 01923 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f 01924 #define IRP_MJ_SCSI 0x0f 01925 #define IRP_MJ_SHUTDOWN 0x10 01926 #define IRP_MJ_LOCK_CONTROL 0x11 01927 #define IRP_MJ_CLEANUP 0x12 01928 #define IRP_MJ_CREATE_MAILSLOT 0x13 01929 #define IRP_MJ_QUERY_SECURITY 0x14 01930 #define IRP_MJ_SET_SECURITY 0x15 01931 #define IRP_MJ_POWER 0x16 01932 #define IRP_MJ_SYSTEM_CONTROL 0x17 01933 #define IRP_MJ_DEVICE_CHANGE 0x18 01934 #define IRP_MJ_QUERY_QUOTA 0x19 01935 #define IRP_MJ_SET_QUOTA 0x1a 01936 #define IRP_MJ_PNP 0x1b 01937 #define IRP_MJ_PNP_POWER 0x1b 01938 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b 01939 01940 #define IRP_MN_SCSI_CLASS 0x01 01941 01942 #define IRP_MN_START_DEVICE 0x00 01943 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 01944 #define IRP_MN_REMOVE_DEVICE 0x02 01945 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 01946 #define IRP_MN_STOP_DEVICE 0x04 01947 #define IRP_MN_QUERY_STOP_DEVICE 0x05 01948 #define IRP_MN_CANCEL_STOP_DEVICE 0x06 01949 01950 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 01951 #define IRP_MN_QUERY_INTERFACE 0x08 01952 #define IRP_MN_QUERY_CAPABILITIES 0x09 01953 #define IRP_MN_QUERY_RESOURCES 0x0A 01954 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B 01955 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C 01956 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D 01957 01958 #define IRP_MN_READ_CONFIG 0x0F 01959 #define IRP_MN_WRITE_CONFIG 0x10 01960 #define IRP_MN_EJECT 0x11 01961 #define IRP_MN_SET_LOCK 0x12 01962 #define IRP_MN_QUERY_ID 0x13 01963 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 01964 #define IRP_MN_QUERY_BUS_INFORMATION 0x15 01965 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 01966 #define IRP_MN_SURPRISE_REMOVAL 0x17 01967 #if (NTDDI_VERSION >= NTDDI_WIN7) 01968 #define IRP_MN_DEVICE_ENUMERATED 0x19 01969 #endif 01970 01971 #define IRP_MN_WAIT_WAKE 0x00 01972 #define IRP_MN_POWER_SEQUENCE 0x01 01973 #define IRP_MN_SET_POWER 0x02 01974 #define IRP_MN_QUERY_POWER 0x03 01975 01976 #define IRP_MN_QUERY_ALL_DATA 0x00 01977 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 01978 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 01979 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 01980 #define IRP_MN_ENABLE_EVENTS 0x04 01981 #define IRP_MN_DISABLE_EVENTS 0x05 01982 #define IRP_MN_ENABLE_COLLECTION 0x06 01983 #define IRP_MN_DISABLE_COLLECTION 0x07 01984 #define IRP_MN_REGINFO 0x08 01985 #define IRP_MN_EXECUTE_METHOD 0x09 01986 01987 #define IRP_MN_REGINFO_EX 0x0b 01988 01989 typedef struct _FILE_OBJECT { 01990 CSHORT Type; 01991 CSHORT Size; 01992 PDEVICE_OBJECT DeviceObject; 01993 PVPB Vpb; 01994 PVOID FsContext; 01995 PVOID FsContext2; 01996 PSECTION_OBJECT_POINTERS SectionObjectPointer; 01997 PVOID PrivateCacheMap; 01998 NTSTATUS FinalStatus; 01999 struct _FILE_OBJECT *RelatedFileObject; 02000 BOOLEAN LockOperation; 02001 BOOLEAN DeletePending; 02002 BOOLEAN ReadAccess; 02003 BOOLEAN WriteAccess; 02004 BOOLEAN DeleteAccess; 02005 BOOLEAN SharedRead; 02006 BOOLEAN SharedWrite; 02007 BOOLEAN SharedDelete; 02008 ULONG Flags; 02009 UNICODE_STRING FileName; 02010 LARGE_INTEGER CurrentByteOffset; 02011 volatile ULONG Waiters; 02012 volatile ULONG Busy; 02013 PVOID LastLock; 02014 KEVENT Lock; 02015 KEVENT Event; 02016 volatile PIO_COMPLETION_CONTEXT CompletionContext; 02017 KSPIN_LOCK IrpListLock; 02018 LIST_ENTRY IrpList; 02019 volatile PVOID FileObjectExtension; 02020 } FILE_OBJECT, *PFILE_OBJECT; 02021 02022 typedef struct _IO_ERROR_LOG_PACKET { 02023 UCHAR MajorFunctionCode; 02024 UCHAR RetryCount; 02025 USHORT DumpDataSize; 02026 USHORT NumberOfStrings; 02027 USHORT StringOffset; 02028 USHORT EventCategory; 02029 NTSTATUS ErrorCode; 02030 ULONG UniqueErrorValue; 02031 NTSTATUS FinalStatus; 02032 ULONG SequenceNumber; 02033 ULONG IoControlCode; 02034 LARGE_INTEGER DeviceOffset; 02035 ULONG DumpData[1]; 02036 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; 02037 02038 typedef struct _IO_ERROR_LOG_MESSAGE { 02039 USHORT Type; 02040 USHORT Size; 02041 USHORT DriverNameLength; 02042 LARGE_INTEGER TimeStamp; 02043 ULONG DriverNameOffset; 02044 IO_ERROR_LOG_PACKET EntryData; 02045 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; 02046 02047 #define ERROR_LOG_LIMIT_SIZE 240 02048 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \ 02049 sizeof(IO_ERROR_LOG_PACKET) + \ 02050 (sizeof(WCHAR) * 40)) 02051 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \ 02052 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) 02053 #define IO_ERROR_LOG_MESSAGE_LENGTH \ 02054 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \ 02055 ERROR_LOG_MESSAGE_LIMIT_SIZE : \ 02056 PORT_MAXIMUM_MESSAGE_LENGTH) 02057 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ 02058 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) 02059 02060 #ifdef _WIN64 02061 #define PORT_MAXIMUM_MESSAGE_LENGTH 512 02062 #else 02063 #define PORT_MAXIMUM_MESSAGE_LENGTH 256 02064 #endif 02065 02066 typedef enum _DMA_WIDTH { 02067 Width8Bits, 02068 Width16Bits, 02069 Width32Bits, 02070 MaximumDmaWidth 02071 } DMA_WIDTH, *PDMA_WIDTH; 02072 02073 typedef enum _DMA_SPEED { 02074 Compatible, 02075 TypeA, 02076 TypeB, 02077 TypeC, 02078 TypeF, 02079 MaximumDmaSpeed 02080 } DMA_SPEED, *PDMA_SPEED; 02081 02082 /* DEVICE_DESCRIPTION.Version */ 02083 02084 #define DEVICE_DESCRIPTION_VERSION 0x0000 02085 #define DEVICE_DESCRIPTION_VERSION1 0x0001 02086 #define DEVICE_DESCRIPTION_VERSION2 0x0002 02087 02088 typedef struct _DEVICE_DESCRIPTION { 02089 ULONG Version; 02090 BOOLEAN Master; 02091 BOOLEAN ScatterGather; 02092 BOOLEAN DemandMode; 02093 BOOLEAN AutoInitialize; 02094 BOOLEAN Dma32BitAddresses; 02095 BOOLEAN IgnoreCount; 02096 BOOLEAN Reserved1; 02097 BOOLEAN Dma64BitAddresses; 02098 ULONG BusNumber; 02099 ULONG DmaChannel; 02100 INTERFACE_TYPE InterfaceType; 02101 DMA_WIDTH DmaWidth; 02102 DMA_SPEED DmaSpeed; 02103 ULONG MaximumLength; 02104 ULONG DmaPort; 02105 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; 02106 02107 typedef enum _DEVICE_RELATION_TYPE { 02108 BusRelations, 02109 EjectionRelations, 02110 PowerRelations, 02111 RemovalRelations, 02112 TargetDeviceRelation, 02113 SingleBusRelations, 02114 TransportRelations 02115 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; 02116 02117 typedef struct _DEVICE_RELATIONS { 02118 ULONG Count; 02119 PDEVICE_OBJECT Objects[1]; 02120 } DEVICE_RELATIONS, *PDEVICE_RELATIONS; 02121 02122 typedef struct _DEVOBJ_EXTENSION { 02123 CSHORT Type; 02124 USHORT Size; 02125 PDEVICE_OBJECT DeviceObject; 02126 } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; 02127 02128 typedef struct _SCATTER_GATHER_ELEMENT { 02129 PHYSICAL_ADDRESS Address; 02130 ULONG Length; 02131 ULONG_PTR Reserved; 02132 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; 02133 02134 #if defined(_MSC_EXTENSIONS) || defined(__GNUC__) 02135 02136 #if defined(_MSC_VER) 02137 #if _MSC_VER >= 1200 02138 #pragma warning(push) 02139 #endif 02140 #pragma warning(disable:4200) 02141 #endif /* _MSC_VER */ 02142 02143 typedef struct _SCATTER_GATHER_LIST { 02144 ULONG NumberOfElements; 02145 ULONG_PTR Reserved; 02146 SCATTER_GATHER_ELEMENT Elements[1]; 02147 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; 02148 02149 #if defined(_MSC_VER) 02150 #if _MSC_VER >= 1200 02151 #pragma warning(pop) 02152 #else 02153 #pragma warning(default:4200) 02154 #endif 02155 #endif /* _MSC_VER */ 02156 02157 #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ 02158 02159 struct _SCATTER_GATHER_LIST; 02160 typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; 02161 02162 #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */ 02163 02164 _Function_class_(DRIVER_ADD_DEVICE) 02165 _IRQL_requires_(PASSIVE_LEVEL) 02166 _IRQL_requires_same_ 02167 _When_(return>=0, _Kernel_clear_do_init_(__yes)) 02168 typedef NTSTATUS 02169 (NTAPI DRIVER_ADD_DEVICE)( 02170 _In_ struct _DRIVER_OBJECT *DriverObject, 02171 _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject); 02172 typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; 02173 02174 typedef struct _DRIVER_EXTENSION { 02175 struct _DRIVER_OBJECT *DriverObject; 02176 PDRIVER_ADD_DEVICE AddDevice; 02177 ULONG Count; 02178 UNICODE_STRING ServiceKeyName; 02179 } DRIVER_EXTENSION, *PDRIVER_EXTENSION; 02180 02181 #define DRVO_UNLOAD_INVOKED 0x00000001 02182 #define DRVO_LEGACY_DRIVER 0x00000002 02183 #define DRVO_BUILTIN_DRIVER 0x00000004 02184 02185 _Function_class_(DRIVER_INITIALIZE) 02186 _IRQL_requires_same_ 02187 typedef NTSTATUS 02188 (NTAPI DRIVER_INITIALIZE)( 02189 _In_ struct _DRIVER_OBJECT *DriverObject, 02190 _In_ PUNICODE_STRING RegistryPath); 02191 typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; 02192 02193 _Function_class_(DRIVER_STARTIO) 02194 _IRQL_always_function_min_(DISPATCH_LEVEL) 02195 _IRQL_requires_(DISPATCH_LEVEL) 02196 _IRQL_requires_same_ 02197 typedef VOID 02198 (NTAPI DRIVER_STARTIO)( 02199 _Inout_ struct _DEVICE_OBJECT *DeviceObject, 02200 _Inout_ struct _IRP *Irp); 02201 typedef DRIVER_STARTIO *PDRIVER_STARTIO; 02202 02203 _Function_class_(DRIVER_UNLOAD) 02204 _IRQL_requires_(PASSIVE_LEVEL) 02205 _IRQL_requires_same_ 02206 typedef VOID 02207 (NTAPI DRIVER_UNLOAD)( 02208 _In_ struct _DRIVER_OBJECT *DriverObject); 02209 typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; 02210 02211 _Function_class_(DRIVER_DISPATCH) 02212 _IRQL_requires_(PASSIVE_LEVEL) 02213 _IRQL_requires_same_ 02214 typedef NTSTATUS 02215 (NTAPI DRIVER_DISPATCH)( 02216 _In_ struct _DEVICE_OBJECT *DeviceObject, 02217 _Inout_ struct _IRP *Irp); 02218 typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; 02219 02220 typedef struct _DRIVER_OBJECT { 02221 CSHORT Type; 02222 CSHORT Size; 02223 PDEVICE_OBJECT DeviceObject; 02224 ULONG Flags; 02225 PVOID DriverStart; 02226 ULONG DriverSize; 02227 PVOID DriverSection; 02228 PDRIVER_EXTENSION DriverExtension; 02229 UNICODE_STRING DriverName; 02230 PUNICODE_STRING HardwareDatabase; 02231 struct _FAST_IO_DISPATCH *FastIoDispatch; 02232 PDRIVER_INITIALIZE DriverInit; 02233 PDRIVER_STARTIO DriverStartIo; 02234 PDRIVER_UNLOAD DriverUnload; 02235 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; 02236 } DRIVER_OBJECT, *PDRIVER_OBJECT; 02237 02238 typedef struct _DMA_ADAPTER { 02239 USHORT Version; 02240 USHORT Size; 02241 struct _DMA_OPERATIONS* DmaOperations; 02242 } DMA_ADAPTER, *PDMA_ADAPTER; 02243 02244 typedef VOID 02245 (NTAPI *PPUT_DMA_ADAPTER)( 02246 PDMA_ADAPTER DmaAdapter); 02247 02248 typedef PVOID 02249 (NTAPI *PALLOCATE_COMMON_BUFFER)( 02250 _In_ PDMA_ADAPTER DmaAdapter, 02251 _In_ ULONG Length, 02252 _Out_ PPHYSICAL_ADDRESS LogicalAddress, 02253 _In_ BOOLEAN CacheEnabled); 02254 02255 typedef VOID 02256 (NTAPI *PFREE_COMMON_BUFFER)( 02257 _In_ PDMA_ADAPTER DmaAdapter, 02258 _In_ ULONG Length, 02259 _In_ PHYSICAL_ADDRESS LogicalAddress, 02260 _In_ PVOID VirtualAddress, 02261 _In_ BOOLEAN CacheEnabled); 02262 02263 typedef NTSTATUS 02264 (NTAPI *PALLOCATE_ADAPTER_CHANNEL)( 02265 _In_ PDMA_ADAPTER DmaAdapter, 02266 _In_ PDEVICE_OBJECT DeviceObject, 02267 _In_ ULONG NumberOfMapRegisters, 02268 _In_ PDRIVER_CONTROL ExecutionRoutine, 02269 _In_ PVOID Context); 02270 02271 typedef BOOLEAN 02272 (NTAPI *PFLUSH_ADAPTER_BUFFERS)( 02273 _In_ PDMA_ADAPTER DmaAdapter, 02274 _In_ PMDL Mdl, 02275 _In_ PVOID MapRegisterBase, 02276 _In_ PVOID CurrentVa, 02277 _In_ ULONG Length, 02278 _In_ BOOLEAN WriteToDevice); 02279 02280 typedef VOID 02281 (NTAPI *PFREE_ADAPTER_CHANNEL)( 02282 _In_ PDMA_ADAPTER DmaAdapter); 02283 02284 typedef VOID 02285 (NTAPI *PFREE_MAP_REGISTERS)( 02286 _In_ PDMA_ADAPTER DmaAdapter, 02287 PVOID MapRegisterBase, 02288 ULONG NumberOfMapRegisters); 02289 02290 typedef PHYSICAL_ADDRESS 02291 (NTAPI *PMAP_TRANSFER)( 02292 _In_ PDMA_ADAPTER DmaAdapter, 02293 _In_ PMDL Mdl, 02294 _In_ PVOID MapRegisterBase, 02295 _In_ PVOID CurrentVa, 02296 _Inout_ PULONG Length, 02297 _In_ BOOLEAN WriteToDevice); 02298 02299 typedef ULONG 02300 (NTAPI *PGET_DMA_ALIGNMENT)( 02301 _In_ PDMA_ADAPTER DmaAdapter); 02302 02303 typedef ULONG 02304 (NTAPI *PREAD_DMA_COUNTER)( 02305 _In_ PDMA_ADAPTER DmaAdapter); 02306 02307 _Function_class_(DRIVER_LIST_CONTROL) 02308 _IRQL_requires_same_ 02309 typedef VOID 02310 (NTAPI DRIVER_LIST_CONTROL)( 02311 _In_ struct _DEVICE_OBJECT *DeviceObject, 02312 _In_ struct _IRP *Irp, 02313 _In_ struct _SCATTER_GATHER_LIST *ScatterGather, 02314 _In_ PVOID Context); 02315 typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL; 02316 02317 typedef NTSTATUS 02318 (NTAPI *PGET_SCATTER_GATHER_LIST)( 02319 _In_ PDMA_ADAPTER DmaAdapter, 02320 _In_ PDEVICE_OBJECT DeviceObject, 02321 _In_ PMDL Mdl, 02322 _In_ PVOID CurrentVa, 02323 _In_ ULONG Length, 02324 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, 02325 _In_ PVOID Context, 02326 _In_ BOOLEAN WriteToDevice); 02327 02328 typedef VOID 02329 (NTAPI *PPUT_SCATTER_GATHER_LIST)( 02330 _In_ PDMA_ADAPTER DmaAdapter, 02331 _In_ PSCATTER_GATHER_LIST ScatterGather, 02332 _In_ BOOLEAN WriteToDevice); 02333 02334 typedef NTSTATUS 02335 (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( 02336 _In_ PDMA_ADAPTER DmaAdapter, 02337 _In_ PMDL Mdl OPTIONAL, 02338 _In_ PVOID CurrentVa, 02339 _In_ ULONG Length, 02340 _Out_ PULONG ScatterGatherListSize, 02341 _Out_ OPTIONAL PULONG pNumberOfMapRegisters); 02342 02343 typedef NTSTATUS 02344 (NTAPI *PBUILD_SCATTER_GATHER_LIST)( 02345 _In_ PDMA_ADAPTER DmaAdapter, 02346 _In_ PDEVICE_OBJECT DeviceObject, 02347 _In_ PMDL Mdl, 02348 _In_ PVOID CurrentVa, 02349 _In_ ULONG Length, 02350 _In_ PDRIVER_LIST_CONTROL ExecutionRoutine, 02351 _In_ PVOID Context, 02352 _In_ BOOLEAN WriteToDevice, 02353 _In_ PVOID ScatterGatherBuffer, 02354 _In_ ULONG ScatterGatherLength); 02355 02356 typedef NTSTATUS 02357 (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( 02358 _In_ PDMA_ADAPTER DmaAdapter, 02359 _In_ PSCATTER_GATHER_LIST ScatterGather, 02360 _In_ PMDL OriginalMdl, 02361 _Out_ PMDL *TargetMdl); 02362 02363 typedef struct _DMA_OPERATIONS { 02364 ULONG Size; 02365 PPUT_DMA_ADAPTER PutDmaAdapter; 02366 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; 02367 PFREE_COMMON_BUFFER FreeCommonBuffer; 02368 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; 02369 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; 02370 PFREE_ADAPTER_CHANNEL FreeAdapterChannel; 02371 PFREE_MAP_REGISTERS FreeMapRegisters; 02372 PMAP_TRANSFER MapTransfer; 02373 PGET_DMA_ALIGNMENT GetDmaAlignment; 02374 PREAD_DMA_COUNTER ReadDmaCounter; 02375 PGET_SCATTER_GATHER_LIST GetScatterGatherList; 02376 PPUT_SCATTER_GATHER_LIST PutScatterGatherList; 02377 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; 02378 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; 02379 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; 02380 } DMA_OPERATIONS, *PDMA_OPERATIONS; 02381 02382 typedef struct _IO_RESOURCE_DESCRIPTOR { 02383 UCHAR Option; 02384 UCHAR Type; 02385 UCHAR ShareDisposition; 02386 UCHAR Spare1; 02387 USHORT Flags; 02388 USHORT Spare2; 02389 union { 02390 struct { 02391 ULONG Length; 02392 ULONG Alignment; 02393 PHYSICAL_ADDRESS MinimumAddress; 02394 PHYSICAL_ADDRESS MaximumAddress; 02395 } Port; 02396 struct { 02397 ULONG Length; 02398 ULONG Alignment; 02399 PHYSICAL_ADDRESS MinimumAddress; 02400 PHYSICAL_ADDRESS MaximumAddress; 02401 } Memory; 02402 struct { 02403 ULONG MinimumVector; 02404 ULONG MaximumVector; 02405 } Interrupt; 02406 struct { 02407 ULONG MinimumChannel; 02408 ULONG MaximumChannel; 02409 } Dma; 02410 struct { 02411 ULONG Length; 02412 ULONG Alignment; 02413 PHYSICAL_ADDRESS MinimumAddress; 02414 PHYSICAL_ADDRESS MaximumAddress; 02415 } Generic; 02416 struct { 02417 ULONG Data[3]; 02418 } DevicePrivate; 02419 struct { 02420 ULONG Length; 02421 ULONG MinBusNumber; 02422 ULONG MaxBusNumber; 02423 ULONG Reserved; 02424 } BusNumber; 02425 struct { 02426 ULONG Priority; 02427 ULONG Reserved1; 02428 ULONG Reserved2; 02429 } ConfigData; 02430 } u; 02431 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; 02432 02433 typedef struct _IO_RESOURCE_LIST { 02434 USHORT Version; 02435 USHORT Revision; 02436 ULONG Count; 02437 IO_RESOURCE_DESCRIPTOR Descriptors[1]; 02438 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; 02439 02440 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { 02441 ULONG ListSize; 02442 INTERFACE_TYPE InterfaceType; 02443 ULONG BusNumber; 02444 ULONG SlotNumber; 02445 ULONG Reserved[3]; 02446 ULONG AlternativeLists; 02447 IO_RESOURCE_LIST List[1]; 02448 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; 02449 02450 _Function_class_(DRIVER_CANCEL) 02451 _Requires_lock_held_(_Global_cancel_spin_lock_) 02452 _Releases_lock_(_Global_cancel_spin_lock_) 02453 _IRQL_requires_min_(DISPATCH_LEVEL) 02454 _IRQL_requires_(DISPATCH_LEVEL) 02455 typedef VOID 02456 (NTAPI DRIVER_CANCEL)( 02457 _Inout_ struct _DEVICE_OBJECT *DeviceObject, 02458 _Inout_ _IRQL_uses_cancel_ struct _IRP *Irp); 02459 typedef DRIVER_CANCEL *PDRIVER_CANCEL; 02460 02461 typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { 02462 CSHORT Type; 02463 USHORT Size; 02464 struct _MDL *MdlAddress; 02465 ULONG Flags; 02466 union { 02467 struct _IRP *MasterIrp; 02468 volatile LONG IrpCount; 02469 PVOID SystemBuffer; 02470 } AssociatedIrp; 02471 LIST_ENTRY ThreadListEntry; 02472 IO_STATUS_BLOCK IoStatus; 02473 KPROCESSOR_MODE RequestorMode; 02474 BOOLEAN PendingReturned; 02475 CHAR StackCount; 02476 CHAR CurrentLocation; 02477 BOOLEAN Cancel; 02478 KIRQL CancelIrql; 02479 CCHAR ApcEnvironment; 02480 UCHAR AllocationFlags; 02481 PIO_STATUS_BLOCK UserIosb; 02482 PKEVENT UserEvent; 02483 union { 02484 struct { 02485 _ANONYMOUS_UNION union { 02486 PIO_APC_ROUTINE UserApcRoutine; 02487 PVOID IssuingProcess; 02488 } DUMMYUNIONNAME; 02489 PVOID UserApcContext; 02490 } AsynchronousParameters; 02491 LARGE_INTEGER AllocationSize; 02492 } Overlay; 02493 volatile PDRIVER_CANCEL CancelRoutine; 02494 PVOID UserBuffer; 02495 union { 02496 struct { 02497 _ANONYMOUS_UNION union { 02498 KDEVICE_QUEUE_ENTRY DeviceQueueEntry; 02499 _ANONYMOUS_STRUCT struct { 02500 PVOID DriverContext[4]; 02501 } DUMMYSTRUCTNAME; 02502 } DUMMYUNIONNAME; 02503 PETHREAD Thread; 02504 PCHAR AuxiliaryBuffer; 02505 _ANONYMOUS_STRUCT struct { 02506 LIST_ENTRY ListEntry; 02507 _ANONYMOUS_UNION union { 02508 struct _IO_STACK_LOCATION *CurrentStackLocation; 02509 ULONG PacketType; 02510 } DUMMYUNIONNAME; 02511 } DUMMYSTRUCTNAME; 02512 struct _FILE_OBJECT *OriginalFileObject; 02513 } Overlay; 02514 KAPC Apc; 02515 PVOID CompletionKey; 02516 } Tail; 02517 } IRP, *PIRP; 02518 02519 typedef enum _IO_PAGING_PRIORITY { 02520 IoPagingPriorityInvalid, 02521 IoPagingPriorityNormal, 02522 IoPagingPriorityHigh, 02523 IoPagingPriorityReserved1, 02524 IoPagingPriorityReserved2 02525 } IO_PAGING_PRIORITY; 02526 02527 _Function_class_(IO_COMPLETION_ROUTINE) 02528 _IRQL_requires_same_ 02529 typedef NTSTATUS 02530 (NTAPI IO_COMPLETION_ROUTINE)( 02531 _In_ struct _DEVICE_OBJECT *DeviceObject, 02532 _In_ struct _IRP *Irp, 02533 _In_opt_ PVOID Context); 02534 typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; 02535 02536 _Function_class_(IO_DPC_ROUTINE) 02537 _IRQL_always_function_min_(DISPATCH_LEVEL) 02538 _IRQL_requires_(DISPATCH_LEVEL) 02539 _IRQL_requires_same_ 02540 typedef VOID 02541 (NTAPI IO_DPC_ROUTINE)( 02542 _In_ struct _KDPC *Dpc, 02543 _In_ struct _DEVICE_OBJECT *DeviceObject, 02544 _Inout_ struct _IRP *Irp, 02545 _In_opt_ PVOID Context); 02546 typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE; 02547 02548 typedef NTSTATUS 02549 (NTAPI *PMM_DLL_INITIALIZE)( 02550 _In_ PUNICODE_STRING RegistryPath); 02551 02552 typedef NTSTATUS 02553 (NTAPI *PMM_DLL_UNLOAD)( 02554 VOID); 02555 02556 _Function_class_(IO_TIMER_ROUTINE) 02557 _IRQL_requires_same_ 02558 typedef VOID 02559 (NTAPI IO_TIMER_ROUTINE)( 02560 _In_ struct _DEVICE_OBJECT *DeviceObject, 02561 _In_opt_ PVOID Context); 02562 typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE; 02563 02564 typedef struct _IO_SECURITY_CONTEXT { 02565 PSECURITY_QUALITY_OF_SERVICE SecurityQos; 02566 PACCESS_STATE AccessState; 02567 ACCESS_MASK DesiredAccess; 02568 ULONG FullCreateOptions; 02569 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; 02570 02571 struct _IO_CSQ; 02572 02573 typedef struct _IO_CSQ_IRP_CONTEXT { 02574 ULONG Type; 02575 struct _IRP *Irp; 02576 struct _IO_CSQ *Csq; 02577 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; 02578 02579 typedef VOID 02580 (NTAPI *PIO_CSQ_INSERT_IRP)( 02581 _In_ struct _IO_CSQ *Csq, 02582 _In_ PIRP Irp); 02583 02584 typedef NTSTATUS 02585 (NTAPI IO_CSQ_INSERT_IRP_EX)( 02586 _In_ struct _IO_CSQ *Csq, 02587 _In_ PIRP Irp, 02588 _In_ PVOID InsertContext); 02589 typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX; 02590 02591 typedef VOID 02592 (NTAPI *PIO_CSQ_REMOVE_IRP)( 02593 _In_ struct _IO_CSQ *Csq, 02594 _In_ PIRP Irp); 02595 02596 typedef PIRP 02597 (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)( 02598 _In_ struct _IO_CSQ *Csq, 02599 _In_ PIRP Irp, 02600 _In_ PVOID PeekContext); 02601 02602 typedef VOID 02603 (NTAPI *PIO_CSQ_ACQUIRE_LOCK)( 02604 _In_ struct _IO_CSQ *Csq, 02605 _Out_ PKIRQL Irql); 02606 02607 typedef VOID 02608 (NTAPI *PIO_CSQ_RELEASE_LOCK)( 02609 _In_ struct _IO_CSQ *Csq, 02610 _In_ KIRQL Irql); 02611 02612 typedef VOID 02613 (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( 02614 _In_ struct _IO_CSQ *Csq, 02615 _In_ PIRP Irp); 02616 02617 typedef struct _IO_CSQ { 02618 ULONG Type; 02619 PIO_CSQ_INSERT_IRP CsqInsertIrp; 02620 PIO_CSQ_REMOVE_IRP CsqRemoveIrp; 02621 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; 02622 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; 02623 PIO_CSQ_RELEASE_LOCK CsqReleaseLock; 02624 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; 02625 PVOID ReservePointer; 02626 } IO_CSQ, *PIO_CSQ; 02627 02628 typedef enum _BUS_QUERY_ID_TYPE { 02629 BusQueryDeviceID, 02630 BusQueryHardwareIDs, 02631 BusQueryCompatibleIDs, 02632 BusQueryInstanceID, 02633 BusQueryDeviceSerialNumber 02634 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; 02635 02636 typedef enum _DEVICE_TEXT_TYPE { 02637 DeviceTextDescription, 02638 DeviceTextLocationInformation 02639 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; 02640 02641 typedef BOOLEAN 02642 (NTAPI *PGPE_SERVICE_ROUTINE)( 02643 PVOID, 02644 PVOID); 02645 02646 _IRQL_requires_max_(DISPATCH_LEVEL) 02647 _Must_inspect_result_ 02648 typedef NTSTATUS 02649 (NTAPI *PGPE_CONNECT_VECTOR)( 02650 PDEVICE_OBJECT, 02651 ULONG, 02652 KINTERRUPT_MODE, 02653 BOOLEAN, 02654 PGPE_SERVICE_ROUTINE, 02655 PVOID, 02656 PVOID); 02657 02658 _IRQL_requires_max_(DISPATCH_LEVEL) 02659 _Must_inspect_result_ 02660 typedef NTSTATUS 02661 (NTAPI *PGPE_DISCONNECT_VECTOR)( 02662 PVOID); 02663 02664 _IRQL_requires_max_(DISPATCH_LEVEL) 02665 _Must_inspect_result_ 02666 typedef NTSTATUS 02667 (NTAPI *PGPE_ENABLE_EVENT)( 02668 PDEVICE_OBJECT, 02669 PVOID); 02670 02671 _IRQL_requires_max_(DISPATCH_LEVEL) 02672 _Must_inspect_result_ 02673 typedef NTSTATUS 02674 (NTAPI *PGPE_DISABLE_EVENT)( 02675 PDEVICE_OBJECT, 02676 PVOID); 02677 02678 _IRQL_requires_max_(DISPATCH_LEVEL) 02679 _Must_inspect_result_ 02680 typedef NTSTATUS 02681 (NTAPI *PGPE_CLEAR_STATUS)( 02682 PDEVICE_OBJECT, 02683 PVOID); 02684 02685 typedef VOID 02686 (NTAPI *PDEVICE_NOTIFY_CALLBACK)( 02687 PVOID, 02688 ULONG); 02689 02690 _IRQL_requires_max_(DISPATCH_LEVEL) 02691 _Must_inspect_result_ 02692 typedef NTSTATUS 02693 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( 02694 PDEVICE_OBJECT, 02695 PDEVICE_NOTIFY_CALLBACK, 02696 PVOID); 02697 02698 _IRQL_requires_max_(DISPATCH_LEVEL) 02699 typedef VOID 02700 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( 02701 PDEVICE_OBJECT, 02702 PDEVICE_NOTIFY_CALLBACK); 02703 02704 typedef struct _ACPI_INTERFACE_STANDARD { 02705 USHORT Size; 02706 USHORT Version; 02707 PVOID Context; 02708 PINTERFACE_REFERENCE InterfaceReference; 02709 PINTERFACE_DEREFERENCE InterfaceDereference; 02710 PGPE_CONNECT_VECTOR GpeConnectVector; 02711 PGPE_DISCONNECT_VECTOR GpeDisconnectVector; 02712 PGPE_ENABLE_EVENT GpeEnableEvent; 02713 PGPE_DISABLE_EVENT GpeDisableEvent; 02714 PGPE_CLEAR_STATUS GpeClearStatus; 02715 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications; 02716 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications; 02717 } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD; 02718 02719 typedef BOOLEAN 02720 (NTAPI *PGPE_SERVICE_ROUTINE2)( 02721 PVOID ObjectContext, 02722 PVOID ServiceContext); 02723 02724 _IRQL_requires_max_(DISPATCH_LEVEL) 02725 _Must_inspect_result_ 02726 typedef NTSTATUS 02727 (NTAPI *PGPE_CONNECT_VECTOR2)( 02728 PVOID Context, 02729 ULONG GpeNumber, 02730 KINTERRUPT_MODE Mode, 02731 BOOLEAN Shareable, 02732 PGPE_SERVICE_ROUTINE ServiceRoutine, 02733 PVOID ServiceContext, 02734 PVOID *ObjectContext); 02735 02736 _IRQL_requires_max_(DISPATCH_LEVEL) 02737 _Must_inspect_result_ 02738 typedef NTSTATUS 02739 (NTAPI *PGPE_DISCONNECT_VECTOR2)( 02740 PVOID Context, 02741 PVOID ObjectContext); 02742 02743 _IRQL_requires_max_(DISPATCH_LEVEL) 02744 _Must_inspect_result_ 02745 typedef NTSTATUS 02746 (NTAPI *PGPE_ENABLE_EVENT2)( 02747 PVOID Context, 02748 PVOID ObjectContext); 02749 02750 _IRQL_requires_max_(DISPATCH_LEVEL) 02751 _Must_inspect_result_ 02752 typedef NTSTATUS 02753 (NTAPI *PGPE_DISABLE_EVENT2)( 02754 PVOID Context, 02755 PVOID ObjectContext); 02756 02757 _IRQL_requires_max_(DISPATCH_LEVEL) 02758 _Must_inspect_result_ 02759 typedef NTSTATUS 02760 (NTAPI *PGPE_CLEAR_STATUS2)( 02761 PVOID Context, 02762 PVOID ObjectContext); 02763 02764 _IRQL_requires_max_(DISPATCH_LEVEL) 02765 typedef VOID 02766 (NTAPI *PDEVICE_NOTIFY_CALLBACK2)( 02767 PVOID NotificationContext, 02768 ULONG NotifyCode); 02769 02770 _IRQL_requires_max_(DISPATCH_LEVEL) 02771 _Must_inspect_result_ 02772 typedef NTSTATUS 02773 (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( 02774 PVOID Context, 02775 PDEVICE_NOTIFY_CALLBACK2 NotificationHandler, 02776 PVOID NotificationContext); 02777 02778 _IRQL_requires_max_(DISPATCH_LEVEL) 02779 typedef VOID 02780 (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( 02781 PVOID Context); 02782 02783 typedef struct _ACPI_INTERFACE_STANDARD2 { 02784 USHORT Size; 02785 USHORT Version; 02786 PVOID Context; 02787 PINTERFACE_REFERENCE InterfaceReference; 02788 PINTERFACE_DEREFERENCE InterfaceDereference; 02789 PGPE_CONNECT_VECTOR2 GpeConnectVector; 02790 PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector; 02791 PGPE_ENABLE_EVENT2 GpeEnableEvent; 02792 PGPE_DISABLE_EVENT2 GpeDisableEvent; 02793 PGPE_CLEAR_STATUS2 GpeClearStatus; 02794 PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications; 02795 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications; 02796 } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2; 02797 02798 #if !defined(_AMD64_) && !defined(_IA64_) 02799 #include <pshpack4.h> 02800 #endif 02801 typedef struct _IO_STACK_LOCATION { 02802 UCHAR MajorFunction; 02803 UCHAR MinorFunction; 02804 UCHAR Flags; 02805 UCHAR Control; 02806 union { 02807 struct { 02808 PIO_SECURITY_CONTEXT SecurityContext; 02809 ULONG Options; 02810 USHORT POINTER_ALIGNMENT FileAttributes; 02811 USHORT ShareAccess; 02812 ULONG POINTER_ALIGNMENT EaLength; 02813 } Create; 02814 struct { 02815 ULONG Length; 02816 ULONG POINTER_ALIGNMENT Key; 02817 LARGE_INTEGER ByteOffset; 02818 } Read; 02819 struct { 02820 ULONG Length; 02821 ULONG POINTER_ALIGNMENT Key; 02822 LARGE_INTEGER ByteOffset; 02823 } Write; 02824 struct { 02825 ULONG Length; 02826 PUNICODE_STRING FileName; 02827 FILE_INFORMATION_CLASS FileInformationClass; 02828 ULONG FileIndex; 02829 } QueryDirectory; 02830 struct { 02831 ULONG Length; 02832 ULONG CompletionFilter; 02833 } NotifyDirectory; 02834 struct { 02835 ULONG Length; 02836 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 02837 } QueryFile; 02838 struct { 02839 ULONG Length; 02840 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 02841 PFILE_OBJECT FileObject; 02842 _ANONYMOUS_UNION union { 02843 _ANONYMOUS_STRUCT struct { 02844 BOOLEAN ReplaceIfExists; 02845 BOOLEAN AdvanceOnly; 02846 } DUMMYSTRUCTNAME; 02847 ULONG ClusterCount; 02848 HANDLE DeleteHandle; 02849 } DUMMYUNIONNAME; 02850 } SetFile; 02851 struct { 02852 ULONG Length; 02853 PVOID EaList; 02854 ULONG EaListLength; 02855 ULONG EaIndex; 02856 } QueryEa; 02857 struct { 02858 ULONG Length; 02859 } SetEa; 02860 struct { 02861 ULONG Length; 02862 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; 02863 } QueryVolume; 02864 struct { 02865 ULONG Length; 02866 FS_INFORMATION_CLASS FsInformationClass; 02867 } SetVolume; 02868 struct { 02869 ULONG OutputBufferLength; 02870 ULONG InputBufferLength; 02871 ULONG FsControlCode; 02872 PVOID Type3InputBuffer; 02873 } FileSystemControl; 02874 struct { 02875 PLARGE_INTEGER Length; 02876 ULONG Key; 02877 LARGE_INTEGER ByteOffset; 02878 } LockControl; 02879 struct { 02880 ULONG OutputBufferLength; 02881 ULONG POINTER_ALIGNMENT InputBufferLength; 02882 ULONG POINTER_ALIGNMENT IoControlCode; 02883 PVOID Type3InputBuffer; 02884 } DeviceIoControl; 02885 struct { 02886 SECURITY_INFORMATION SecurityInformation; 02887 ULONG POINTER_ALIGNMENT Length; 02888 } QuerySecurity; 02889 struct { 02890 SECURITY_INFORMATION SecurityInformation; 02891 PSECURITY_DESCRIPTOR SecurityDescriptor; 02892 } SetSecurity; 02893 struct { 02894 PVPB Vpb; 02895 PDEVICE_OBJECT DeviceObject; 02896 } MountVolume; 02897 struct { 02898 PVPB Vpb; 02899 PDEVICE_OBJECT DeviceObject; 02900 } VerifyVolume; 02901 struct { 02902 struct _SCSI_REQUEST_BLOCK *Srb; 02903 } Scsi; 02904 struct { 02905 ULONG Length; 02906 PSID StartSid; 02907 struct _FILE_GET_QUOTA_INFORMATION *SidList; 02908 ULONG SidListLength; 02909 } QueryQuota; 02910 struct { 02911 ULONG Length; 02912 } SetQuota; 02913 struct { 02914 DEVICE_RELATION_TYPE Type; 02915 } QueryDeviceRelations; 02916 struct { 02917 CONST GUID *InterfaceType; 02918 USHORT Size; 02919 USHORT Version; 02920 PINTERFACE Interface; 02921 PVOID InterfaceSpecificData; 02922 } QueryInterface; 02923 struct { 02924 PDEVICE_CAPABILITIES Capabilities; 02925 } DeviceCapabilities; 02926 struct { 02927 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; 02928 } FilterResourceRequirements; 02929 struct { 02930 ULONG WhichSpace; 02931 PVOID Buffer; 02932 ULONG Offset; 02933 ULONG POINTER_ALIGNMENT Length; 02934 } ReadWriteConfig; 02935 struct { 02936 BOOLEAN Lock; 02937 } SetLock; 02938 struct { 02939 BUS_QUERY_ID_TYPE IdType; 02940 } QueryId; 02941 struct { 02942 DEVICE_TEXT_TYPE DeviceTextType; 02943 LCID POINTER_ALIGNMENT LocaleId; 02944 } QueryDeviceText; 02945 struct { 02946 BOOLEAN InPath; 02947 BOOLEAN Reserved[3]; 02948 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; 02949 } UsageNotification; 02950 struct { 02951 SYSTEM_POWER_STATE PowerState; 02952 } WaitWake; 02953 struct { 02954 PPOWER_SEQUENCE PowerSequence; 02955 } PowerSequence; 02956 struct { 02957 ULONG SystemContext; 02958 POWER_STATE_TYPE POINTER_ALIGNMENT Type; 02959 POWER_STATE POINTER_ALIGNMENT State; 02960 POWER_ACTION POINTER_ALIGNMENT ShutdownType; 02961 } Power; 02962 struct { 02963 PCM_RESOURCE_LIST AllocatedResources; 02964 PCM_RESOURCE_LIST AllocatedResourcesTranslated; 02965 } StartDevice; 02966 struct { 02967 ULONG_PTR ProviderId; 02968 PVOID DataPath; 02969 ULONG BufferSize; 02970 PVOID Buffer; 02971 } WMI; 02972 struct { 02973 PVOID Argument1; 02974 PVOID Argument2; 02975 PVOID Argument3; 02976 PVOID Argument4; 02977 } Others; 02978 } Parameters; 02979 PDEVICE_OBJECT DeviceObject; 02980 PFILE_OBJECT FileObject; 02981 PIO_COMPLETION_ROUTINE CompletionRoutine; 02982 PVOID Context; 02983 } IO_STACK_LOCATION, *PIO_STACK_LOCATION; 02984 #if !defined(_AMD64_) && !defined(_IA64_) 02985 #include <poppack.h> 02986 #endif 02987 02988 /* IO_STACK_LOCATION.Control */ 02989 02990 #define SL_PENDING_RETURNED 0x01 02991 #define SL_ERROR_RETURNED 0x02 02992 #define SL_INVOKE_ON_CANCEL 0x20 02993 #define SL_INVOKE_ON_SUCCESS 0x40 02994 #define SL_INVOKE_ON_ERROR 0x80 02995 02996 $endif (_WDMDDK_) 02997 $if (_WDMDDK_ || _DEVIOCTL_) 02998 #define METHOD_BUFFERED 0 02999 #define METHOD_IN_DIRECT 1 03000 #define METHOD_OUT_DIRECT 2 03001 #define METHOD_NEITHER 3 03002 03003 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT 03004 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT 03005 03006 $endif (_WDMDDK_ || _DEVIOCTL_) 03007 $if (_WDMDDK_) 03008 #define FILE_SUPERSEDED 0x00000000 03009 #define FILE_OPENED 0x00000001 03010 #define FILE_CREATED 0x00000002 03011 #define FILE_OVERWRITTEN 0x00000003 03012 #define FILE_EXISTS 0x00000004 03013 #define FILE_DOES_NOT_EXIST 0x00000005 03014 03015 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe 03016 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff 03017 03018 /* also in winnt.h */ 03019 #define FILE_LIST_DIRECTORY 0x00000001 03020 #define FILE_READ_DATA 0x00000001 03021 #define FILE_ADD_FILE 0x00000002 03022 #define FILE_WRITE_DATA 0x00000002 03023 #define FILE_ADD_SUBDIRECTORY 0x00000004 03024 #define FILE_APPEND_DATA 0x00000004 03025 #define FILE_CREATE_PIPE_INSTANCE 0x00000004 03026 #define FILE_READ_EA 0x00000008 03027 #define FILE_WRITE_EA 0x00000010 03028 #define FILE_EXECUTE 0x00000020 03029 #define FILE_TRAVERSE 0x00000020 03030 #define FILE_DELETE_CHILD 0x00000040 03031 #define FILE_READ_ATTRIBUTES 0x00000080 03032 #define FILE_WRITE_ATTRIBUTES 0x00000100 03033 03034 #define FILE_SHARE_READ 0x00000001 03035 #define FILE_SHARE_WRITE 0x00000002 03036 #define FILE_SHARE_DELETE 0x00000004 03037 #define FILE_SHARE_VALID_FLAGS 0x00000007 03038 03039 #define FILE_ATTRIBUTE_READONLY 0x00000001 03040 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 03041 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 03042 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 03043 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 03044 #define FILE_ATTRIBUTE_DEVICE 0x00000040 03045 #define FILE_ATTRIBUTE_NORMAL 0x00000080 03046 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 03047 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 03048 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 03049 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 03050 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 03051 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 03052 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 03053 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 03054 03055 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 03056 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 03057 03058 #define FILE_VALID_OPTION_FLAGS 0x00ffffff 03059 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 03060 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 03061 #define FILE_VALID_SET_FLAGS 0x00000036 03062 03063 #define FILE_SUPERSEDE 0x00000000 03064 #define FILE_OPEN 0x00000001 03065 #define FILE_CREATE 0x00000002 03066 #define FILE_OPEN_IF 0x00000003 03067 #define FILE_OVERWRITE 0x00000004 03068 #define FILE_OVERWRITE_IF 0x00000005 03069 #define FILE_MAXIMUM_DISPOSITION 0x00000005 03070 03071 #define FILE_DIRECTORY_FILE 0x00000001 03072 #define FILE_WRITE_THROUGH 0x00000002 03073 #define FILE_SEQUENTIAL_ONLY 0x00000004 03074 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 03075 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 03076 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 03077 #define FILE_NON_DIRECTORY_FILE 0x00000040 03078 #define FILE_CREATE_TREE_CONNECTION 0x00000080 03079 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 03080 #define FILE_NO_EA_KNOWLEDGE 0x00000200 03081 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 03082 #define FILE_RANDOM_ACCESS 0x00000800 03083 #define FILE_DELETE_ON_CLOSE 0x00001000 03084 #define FILE_OPEN_BY_FILE_ID 0x00002000 03085 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 03086 #define FILE_NO_COMPRESSION 0x00008000 03087 #if (NTDDI_VERSION >= NTDDI_WIN7) 03088 #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000 03089 #define FILE_DISALLOW_EXCLUSIVE 0x00020000 03090 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 03091 #define FILE_RESERVE_OPFILTER 0x00100000 03092 #define FILE_OPEN_REPARSE_POINT 0x00200000 03093 #define FILE_OPEN_NO_RECALL 0x00400000 03094 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 03095 03096 $endif (_WDMDDK_) 03097 $if (_WDMDDK_ || _DEVIOCTL_) 03098 #define FILE_ANY_ACCESS 0x00000000 03099 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS 03100 #define FILE_READ_ACCESS 0x00000001 03101 #define FILE_WRITE_ACCESS 0x00000002 03102 03103 $endif (_WDMDDK_ || _DEVIOCTL_) 03104 $if (_WDMDDK_) 03105 #define FILE_ALL_ACCESS \ 03106 (STANDARD_RIGHTS_REQUIRED | \ 03107 SYNCHRONIZE | \ 03108 0x1FF) 03109 03110 #define FILE_GENERIC_EXECUTE \ 03111 (STANDARD_RIGHTS_EXECUTE | \ 03112 FILE_READ_ATTRIBUTES | \ 03113 FILE_EXECUTE | \ 03114 SYNCHRONIZE) 03115 03116 #define FILE_GENERIC_READ \ 03117 (STANDARD_RIGHTS_READ | \ 03118 FILE_READ_DATA | \ 03119 FILE_READ_ATTRIBUTES | \ 03120 FILE_READ_EA | \ 03121 SYNCHRONIZE) 03122 03123 #define FILE_GENERIC_WRITE \ 03124 (STANDARD_RIGHTS_WRITE | \ 03125 FILE_WRITE_DATA | \ 03126 FILE_WRITE_ATTRIBUTES | \ 03127 FILE_WRITE_EA | \ 03128 FILE_APPEND_DATA | \ 03129 SYNCHRONIZE) 03130 03131 /* end winnt.h */ 03132 03133 #define WMIREG_ACTION_REGISTER 1 03134 #define WMIREG_ACTION_DEREGISTER 2 03135 #define WMIREG_ACTION_REREGISTER 3 03136 #define WMIREG_ACTION_UPDATE_GUIDS 4 03137 #define WMIREG_ACTION_BLOCK_IRPS 5 03138 03139 #define WMIREGISTER 0 03140 #define WMIUPDATE 1 03141 03142 _Function_class_(WMI_NOTIFICATION_CALLBACK) 03143 _IRQL_requires_same_ 03144 typedef VOID 03145 (NTAPI FWMI_NOTIFICATION_CALLBACK)( 03146 PVOID Wnode, 03147 PVOID Context); 03148 typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK; 03149 03150 #ifndef _PCI_X_ 03151 #define _PCI_X_ 03152 03153 typedef struct _PCI_SLOT_NUMBER { 03154 union { 03155 struct { 03156 ULONG DeviceNumber:5; 03157 ULONG FunctionNumber:3; 03158 ULONG Reserved:24; 03159 } bits; 03160 ULONG AsULONG; 03161 } u; 03162 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; 03163 03164 #define PCI_TYPE0_ADDRESSES 6 03165 #define PCI_TYPE1_ADDRESSES 2 03166 #define PCI_TYPE2_ADDRESSES 5 03167 03168 typedef struct _PCI_COMMON_HEADER { 03169 PCI_COMMON_HEADER_LAYOUT 03170 } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER; 03171 03172 #ifdef __cplusplus 03173 typedef struct _PCI_COMMON_CONFIG { 03174 PCI_COMMON_HEADER_LAYOUT 03175 UCHAR DeviceSpecific[192]; 03176 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; 03177 #else 03178 typedef struct _PCI_COMMON_CONFIG { 03179 PCI_COMMON_HEADER DUMMYSTRUCTNAME; 03180 UCHAR DeviceSpecific[192]; 03181 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; 03182 #endif 03183 03184 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) 03185 03186 #define PCI_EXTENDED_CONFIG_LENGTH 0x1000 03187 03188 #define PCI_MAX_DEVICES 32 03189 #define PCI_MAX_FUNCTION 8 03190 #define PCI_MAX_BRIDGE_NUMBER 0xFF 03191 #define PCI_INVALID_VENDORID 0xFFFF 03192 03193 /* PCI_COMMON_CONFIG.HeaderType */ 03194 #define PCI_MULTIFUNCTION 0x80 03195 #define PCI_DEVICE_TYPE 0x00 03196 #define PCI_BRIDGE_TYPE 0x01 03197 #define PCI_CARDBUS_BRIDGE_TYPE 0x02 03198 03199 #define PCI_CONFIGURATION_TYPE(PciData) \ 03200 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) 03201 03202 #define PCI_MULTIFUNCTION_DEVICE(PciData) \ 03203 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) 03204 03205 /* PCI_COMMON_CONFIG.Command */ 03206 #define PCI_ENABLE_IO_SPACE 0x0001 03207 #define PCI_ENABLE_MEMORY_SPACE 0x0002 03208 #define PCI_ENABLE_BUS_MASTER 0x0004 03209 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 03210 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 03211 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 03212 #define PCI_ENABLE_PARITY 0x0040 03213 #define PCI_ENABLE_WAIT_CYCLE 0x0080 03214 #define PCI_ENABLE_SERR 0x0100 03215 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 03216 #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400 03217 03218 /* PCI_COMMON_CONFIG.Status */ 03219 #define PCI_STATUS_INTERRUPT_PENDING 0x0008 03220 #define PCI_STATUS_CAPABILITIES_LIST 0x0010 03221 #define PCI_STATUS_66MHZ_CAPABLE 0x0020 03222 #define PCI_STATUS_UDF_SUPPORTED 0x0040 03223 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 03224 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 03225 #define PCI_STATUS_DEVSEL 0x0600 03226 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 03227 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 03228 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 03229 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 03230 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 03231 03232 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ 03233 03234 #define PCI_WHICHSPACE_CONFIG 0x0 03235 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ 03236 03237 #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01 03238 #define PCI_CAPABILITY_ID_AGP 0x02 03239 #define PCI_CAPABILITY_ID_VPD 0x03 03240 #define PCI_CAPABILITY_ID_SLOT_ID 0x04 03241 #define PCI_CAPABILITY_ID_MSI 0x05 03242 #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06 03243 #define PCI_CAPABILITY_ID_PCIX 0x07 03244 #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08 03245 #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09 03246 #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A 03247 #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B 03248 #define PCI_CAPABILITY_ID_SHPC 0x0C 03249 #define PCI_CAPABILITY_ID_P2P_SSID 0x0D 03250 #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E 03251 #define PCI_CAPABILITY_ID_SECURE 0x0F 03252 #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10 03253 #define PCI_CAPABILITY_ID_MSIX 0x11 03254 03255 typedef struct _PCI_CAPABILITIES_HEADER { 03256 UCHAR CapabilityID; 03257 UCHAR Next; 03258 } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER; 03259 03260 typedef struct _PCI_PMC { 03261 UCHAR Version:3; 03262 UCHAR PMEClock:1; 03263 UCHAR Rsvd1:1; 03264 UCHAR DeviceSpecificInitialization:1; 03265 UCHAR Rsvd2:2; 03266 struct _PM_SUPPORT { 03267 UCHAR Rsvd2:1; 03268 UCHAR D1:1; 03269 UCHAR D2:1; 03270 UCHAR PMED0:1; 03271 UCHAR PMED1:1; 03272 UCHAR PMED2:1; 03273 UCHAR PMED3Hot:1; 03274 UCHAR PMED3Cold:1; 03275 } Support; 03276 } PCI_PMC, *PPCI_PMC; 03277 03278 typedef struct _PCI_PMCSR { 03279 USHORT PowerState:2; 03280 USHORT Rsvd1:6; 03281 USHORT PMEEnable:1; 03282 USHORT DataSelect:4; 03283 USHORT DataScale:2; 03284 USHORT PMEStatus:1; 03285 } PCI_PMCSR, *PPCI_PMCSR; 03286 03287 typedef struct _PCI_PMCSR_BSE { 03288 UCHAR Rsvd1:6; 03289 UCHAR D3HotSupportsStopClock:1; 03290 UCHAR BusPowerClockControlEnabled:1; 03291 } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE; 03292 03293 typedef struct _PCI_PM_CAPABILITY { 03294 PCI_CAPABILITIES_HEADER Header; 03295 union { 03296 PCI_PMC Capabilities; 03297 USHORT AsUSHORT; 03298 } PMC; 03299 union { 03300 PCI_PMCSR ControlStatus; 03301 USHORT AsUSHORT; 03302 } PMCSR; 03303 union { 03304 PCI_PMCSR_BSE BridgeSupport; 03305 UCHAR AsUCHAR; 03306 } PMCSR_BSE; 03307 UCHAR Data; 03308 } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY; 03309 03310 typedef struct { 03311 PCI_CAPABILITIES_HEADER Header; 03312 union { 03313 struct { 03314 USHORT DataParityErrorRecoveryEnable:1; 03315 USHORT EnableRelaxedOrdering:1; 03316 USHORT MaxMemoryReadByteCount:2; 03317 USHORT MaxOutstandingSplitTransactions:3; 03318 USHORT Reserved:9; 03319 } bits; 03320 USHORT AsUSHORT; 03321 } Command; 03322 union { 03323 struct { 03324 ULONG FunctionNumber:3; 03325 ULONG DeviceNumber:5; 03326 ULONG BusNumber:8; 03327 ULONG Device64Bit:1; 03328 ULONG Capable133MHz:1; 03329 ULONG SplitCompletionDiscarded:1; 03330 ULONG UnexpectedSplitCompletion:1; 03331 ULONG DeviceComplexity:1; 03332 ULONG DesignedMaxMemoryReadByteCount:2; 03333 ULONG DesignedMaxOutstandingSplitTransactions:3; 03334 ULONG DesignedMaxCumulativeReadSize:3; 03335 ULONG ReceivedSplitCompletionErrorMessage:1; 03336 ULONG CapablePCIX266:1; 03337 ULONG CapablePCIX533:1; 03338 } bits; 03339 ULONG AsULONG; 03340 } Status; 03341 } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY; 03342 03343 #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001 03344 #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002 03345 #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003 03346 #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004 03347 #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005 03348 #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006 03349 #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007 03350 #define PCI_EXPRESS_MFVC_CAP_ID 0x0008 03351 #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009 03352 #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A 03353 #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010 03354 03355 typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER { 03356 USHORT CapabilityID; 03357 USHORT Version:4; 03358 USHORT Next:12; 03359 } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER; 03360 03361 typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY { 03362 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 03363 ULONG LowSerialNumber; 03364 ULONG HighSerialNumber; 03365 } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY; 03366 03367 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS { 03368 _ANONYMOUS_STRUCT struct { 03369 ULONG Undefined:1; 03370 ULONG Reserved1:3; 03371 ULONG DataLinkProtocolError:1; 03372 ULONG SurpriseDownError:1; 03373 ULONG Reserved2:6; 03374 ULONG PoisonedTLP:1; 03375 ULONG FlowControlProtocolError:1; 03376 ULONG CompletionTimeout:1; 03377 ULONG CompleterAbort:1; 03378 ULONG UnexpectedCompletion:1; 03379 ULONG ReceiverOverflow:1; 03380 ULONG MalformedTLP:1; 03381 ULONG ECRCError:1; 03382 ULONG UnsupportedRequestError:1; 03383 ULONG Reserved3:11; 03384 } DUMMYSTRUCTNAME; 03385 ULONG AsULONG; 03386 } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS; 03387 03388 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK { 03389 _ANONYMOUS_STRUCT struct { 03390 ULONG Undefined:1; 03391 ULONG Reserved1:3; 03392 ULONG DataLinkProtocolError:1; 03393 ULONG SurpriseDownError:1; 03394 ULONG Reserved2:6; 03395 ULONG PoisonedTLP:1; 03396 ULONG FlowControlProtocolError:1; 03397 ULONG CompletionTimeout:1; 03398 ULONG CompleterAbort:1; 03399 ULONG UnexpectedCompletion:1; 03400 ULONG ReceiverOverflow:1; 03401 ULONG MalformedTLP:1; 03402 ULONG ECRCError:1; 03403 ULONG UnsupportedRequestError:1; 03404 ULONG Reserved3:11; 03405 } DUMMYSTRUCTNAME; 03406 ULONG AsULONG; 03407 } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK; 03408 03409 typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY { 03410 _ANONYMOUS_STRUCT struct { 03411 ULONG Undefined:1; 03412 ULONG Reserved1:3; 03413 ULONG DataLinkProtocolError:1; 03414 ULONG SurpriseDownError:1; 03415 ULONG Reserved2:6; 03416 ULONG PoisonedTLP:1; 03417 ULONG FlowControlProtocolError:1; 03418 ULONG CompletionTimeout:1; 03419 ULONG CompleterAbort:1; 03420 ULONG UnexpectedCompletion:1; 03421 ULONG ReceiverOverflow:1; 03422 ULONG MalformedTLP:1; 03423 ULONG ECRCError:1; 03424 ULONG UnsupportedRequestError:1; 03425 ULONG Reserved3:11; 03426 } DUMMYSTRUCTNAME; 03427 ULONG AsULONG; 03428 } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY; 03429 03430 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS { 03431 _ANONYMOUS_STRUCT struct { 03432 ULONG ReceiverError:1; 03433 ULONG Reserved1:5; 03434 ULONG BadTLP:1; 03435 ULONG BadDLLP:1; 03436 ULONG ReplayNumRollover:1; 03437 ULONG Reserved2:3; 03438 ULONG ReplayTimerTimeout:1; 03439 ULONG AdvisoryNonFatalError:1; 03440 ULONG Reserved3:18; 03441 } DUMMYSTRUCTNAME; 03442 ULONG AsULONG; 03443 } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS; 03444 03445 typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK { 03446 _ANONYMOUS_STRUCT struct { 03447 ULONG ReceiverError:1; 03448 ULONG Reserved1:5; 03449 ULONG BadTLP:1; 03450 ULONG BadDLLP:1; 03451 ULONG ReplayNumRollover:1; 03452 ULONG Reserved2:3; 03453 ULONG ReplayTimerTimeout:1; 03454 ULONG AdvisoryNonFatalError:1; 03455 ULONG Reserved3:18; 03456 } DUMMYSTRUCTNAME; 03457 ULONG AsULONG; 03458 } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK; 03459 03460 typedef union _PCI_EXPRESS_AER_CAPABILITIES { 03461 _ANONYMOUS_STRUCT struct { 03462 ULONG FirstErrorPointer:5; 03463 ULONG ECRCGenerationCapable:1; 03464 ULONG ECRCGenerationEnable:1; 03465 ULONG ECRCCheckCapable:1; 03466 ULONG ECRCCheckEnable:1; 03467 ULONG Reserved:23; 03468 } DUMMYSTRUCTNAME; 03469 ULONG AsULONG; 03470 } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES; 03471 03472 typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND { 03473 _ANONYMOUS_STRUCT struct { 03474 ULONG CorrectableErrorReportingEnable:1; 03475 ULONG NonFatalErrorReportingEnable:1; 03476 ULONG FatalErrorReportingEnable:1; 03477 ULONG Reserved:29; 03478 } DUMMYSTRUCTNAME; 03479 ULONG AsULONG; 03480 } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND; 03481 03482 typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS { 03483 _ANONYMOUS_STRUCT struct { 03484 ULONG CorrectableErrorReceived:1; 03485 ULONG MultipleCorrectableErrorsReceived:1; 03486 ULONG UncorrectableErrorReceived:1; 03487 ULONG MultipleUncorrectableErrorsReceived:1; 03488 ULONG FirstUncorrectableFatal:1; 03489 ULONG NonFatalErrorMessagesReceived:1; 03490 ULONG FatalErrorMessagesReceived:1; 03491 ULONG Reserved:20; 03492 ULONG AdvancedErrorInterruptMessageNumber:5; 03493 } DUMMYSTRUCTNAME; 03494 ULONG AsULONG; 03495 } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS; 03496 03497 typedef union _PCI_EXPRESS_ERROR_SOURCE_ID { 03498 _ANONYMOUS_STRUCT struct { 03499 USHORT CorrectableSourceIdFun:3; 03500 USHORT CorrectableSourceIdDev:5; 03501 USHORT CorrectableSourceIdBus:8; 03502 USHORT UncorrectableSourceIdFun:3; 03503 USHORT UncorrectableSourceIdDev:5; 03504 USHORT UncorrectableSourceIdBus:8; 03505 } DUMMYSTRUCTNAME; 03506 ULONG AsULONG; 03507 } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID; 03508 03509 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS { 03510 _ANONYMOUS_STRUCT struct { 03511 ULONG TargetAbortOnSplitCompletion:1; 03512 ULONG MasterAbortOnSplitCompletion:1; 03513 ULONG ReceivedTargetAbort:1; 03514 ULONG ReceivedMasterAbort:1; 03515 ULONG RsvdZ:1; 03516 ULONG UnexpectedSplitCompletionError:1; 03517 ULONG UncorrectableSplitCompletion:1; 03518 ULONG UncorrectableDataError:1; 03519 ULONG UncorrectableAttributeError:1; 03520 ULONG UncorrectableAddressError:1; 03521 ULONG DelayedTransactionDiscardTimerExpired:1; 03522 ULONG PERRAsserted:1; 03523 ULONG SERRAsserted:1; 03524 ULONG InternalBridgeError:1; 03525 ULONG Reserved:18; 03526 } DUMMYSTRUCTNAME; 03527 ULONG AsULONG; 03528 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS; 03529 03530 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK { 03531 _ANONYMOUS_STRUCT struct { 03532 ULONG TargetAbortOnSplitCompletion:1; 03533 ULONG MasterAbortOnSplitCompletion:1; 03534 ULONG ReceivedTargetAbort:1; 03535 ULONG ReceivedMasterAbort:1; 03536 ULONG RsvdZ:1; 03537 ULONG UnexpectedSplitCompletionError:1; 03538 ULONG UncorrectableSplitCompletion:1; 03539 ULONG UncorrectableDataError:1; 03540 ULONG UncorrectableAttributeError:1; 03541 ULONG UncorrectableAddressError:1; 03542 ULONG DelayedTransactionDiscardTimerExpired:1; 03543 ULONG PERRAsserted:1; 03544 ULONG SERRAsserted:1; 03545 ULONG InternalBridgeError:1; 03546 ULONG Reserved:18; 03547 } DUMMYSTRUCTNAME; 03548 ULONG AsULONG; 03549 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK; 03550 03551 typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY { 03552 _ANONYMOUS_STRUCT struct { 03553 ULONG TargetAbortOnSplitCompletion:1; 03554 ULONG MasterAbortOnSplitCompletion:1; 03555 ULONG ReceivedTargetAbort:1; 03556 ULONG ReceivedMasterAbort:1; 03557 ULONG RsvdZ:1; 03558 ULONG UnexpectedSplitCompletionError:1; 03559 ULONG UncorrectableSplitCompletion:1; 03560 ULONG UncorrectableDataError:1; 03561 ULONG UncorrectableAttributeError:1; 03562 ULONG UncorrectableAddressError:1; 03563 ULONG DelayedTransactionDiscardTimerExpired:1; 03564 ULONG PERRAsserted:1; 03565 ULONG SERRAsserted:1; 03566 ULONG InternalBridgeError:1; 03567 ULONG Reserved:18; 03568 } DUMMYSTRUCTNAME; 03569 ULONG AsULONG; 03570 } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY; 03571 03572 typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES { 03573 _ANONYMOUS_STRUCT struct { 03574 ULONG SecondaryUncorrectableFirstErrorPtr:5; 03575 ULONG Reserved:27; 03576 } DUMMYSTRUCTNAME; 03577 ULONG AsULONG; 03578 } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES; 03579 03580 #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001 03581 #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002 03582 #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004 03583 03584 #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \ 03585 (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \ 03586 ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \ 03587 ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING) 03588 03589 typedef struct _PCI_EXPRESS_AER_CAPABILITY { 03590 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 03591 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 03592 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 03593 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 03594 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 03595 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 03596 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 03597 ULONG HeaderLog[4]; 03598 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; 03599 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; 03600 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; 03601 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; 03602 ULONG SecHeaderLog[4]; 03603 } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY; 03604 03605 typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY { 03606 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 03607 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 03608 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 03609 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 03610 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 03611 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 03612 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 03613 ULONG HeaderLog[4]; 03614 PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand; 03615 PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus; 03616 PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId; 03617 } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY; 03618 03619 typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY { 03620 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 03621 PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus; 03622 PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask; 03623 PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity; 03624 PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus; 03625 PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask; 03626 PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl; 03627 ULONG HeaderLog[4]; 03628 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus; 03629 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask; 03630 PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity; 03631 PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl; 03632 ULONG SecHeaderLog[4]; 03633 } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY; 03634 03635 typedef union _PCI_EXPRESS_SRIOV_CAPS { 03636 _ANONYMOUS_STRUCT struct { 03637 ULONG VFMigrationCapable:1; 03638 ULONG Reserved1:20; 03639 ULONG VFMigrationInterruptNumber:11; 03640 } DUMMYSTRUCTNAME; 03641 ULONG AsULONG; 03642 } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS; 03643 03644 typedef union _PCI_EXPRESS_SRIOV_CONTROL { 03645 _ANONYMOUS_STRUCT struct { 03646 USHORT VFEnable:1; 03647 USHORT VFMigrationEnable:1; 03648 USHORT VFMigrationInterruptEnable:1; 03649 USHORT VFMemorySpaceEnable:1; 03650 USHORT ARICapableHierarchy:1; 03651 USHORT Reserved1:11; 03652 } DUMMYSTRUCTNAME; 03653 USHORT AsUSHORT; 03654 } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL; 03655 03656 typedef union _PCI_EXPRESS_SRIOV_STATUS { 03657 _ANONYMOUS_STRUCT struct { 03658 USHORT VFMigrationStatus:1; 03659 USHORT Reserved1:15; 03660 } DUMMYSTRUCTNAME; 03661 USHORT AsUSHORT; 03662 } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS; 03663 03664 typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY { 03665 _ANONYMOUS_STRUCT struct { 03666 ULONG VFMigrationStateBIR:3; 03667 ULONG VFMigrationStateOffset:29; 03668 } DUMMYSTRUCTNAME; 03669 ULONG AsULONG; 03670 } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY; 03671 03672 typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY { 03673 PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header; 03674 PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities; 03675 PCI_EXPRESS_SRIOV_CONTROL SRIOVControl; 03676 PCI_EXPRESS_SRIOV_STATUS SRIOVStatus; 03677 USHORT InitialVFs; 03678 USHORT TotalVFs; 03679 USHORT NumVFs; 03680 UCHAR FunctionDependencyLink; 03681 UCHAR RsvdP1; 03682 USHORT FirstVFOffset; 03683 USHORT VFStride; 03684 USHORT RsvdP2; 03685 USHORT VFDeviceId; 03686 ULONG SupportedPageSizes; 03687 ULONG SystemPageSize; 03688 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; 03689 PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset; 03690 } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY; 03691 03692 /* PCI device classes */ 03693 #define PCI_CLASS_PRE_20 0x00 03694 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01 03695 #define PCI_CLASS_NETWORK_CTLR 0x02 03696 #define PCI_CLASS_DISPLAY_CTLR 0x03 03697 #define PCI_CLASS_MULTIMEDIA_DEV 0x04 03698 #define PCI_CLASS_MEMORY_CTLR 0x05 03699 #define PCI_CLASS_BRIDGE_DEV 0x06 03700 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 03701 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08 03702 #define PCI_CLASS_INPUT_DEV 0x09 03703 #define PCI_CLASS_DOCKING_STATION 0x0a 03704 #define PCI_CLASS_PROCESSOR 0x0b 03705 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c 03706 #define PCI_CLASS_WIRELESS_CTLR 0x0d 03707 #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e 03708 #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f 03709 #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10 03710 #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11 03711 #define PCI_CLASS_NOT_DEFINED 0xff 03712 03713 /* PCI device subclasses for class 0 */ 03714 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 03715 #define PCI_SUBCLASS_PRE_20_VGA 0x01 03716 03717 /* PCI device subclasses for class 1 (mass storage controllers)*/ 03718 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 03719 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 03720 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 03721 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 03722 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 03723 #define PCI_SUBCLASS_MSC_OTHER 0x80 03724 03725 /* PCI device subclasses for class 2 (network controllers)*/ 03726 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 03727 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 03728 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 03729 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03 03730 #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04 03731 #define PCI_SUBCLASS_NET_OTHER 0x80 03732 03733 /* PCI device subclasses for class 3 (display controllers)*/ 03734 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00 03735 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01 03736 #define PCI_SUBCLASS_VID_3D_CTLR 0x02 03737 #define PCI_SUBCLASS_VID_OTHER 0x80 03738 03739 /* PCI device subclasses for class 4 (multimedia device)*/ 03740 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 03741 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 03742 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 03743 #define PCI_SUBCLASS_MM_OTHER 0x80 03744 03745 /* PCI device subclasses for class 5 (memory controller)*/ 03746 #define PCI_SUBCLASS_MEM_RAM 0x00 03747 #define PCI_SUBCLASS_MEM_FLASH 0x01 03748 #define PCI_SUBCLASS_MEM_OTHER 0x80 03749 03750 /* PCI device subclasses for class 6 (bridge device)*/ 03751 #define PCI_SUBCLASS_BR_HOST 0x00 03752 #define PCI_SUBCLASS_BR_ISA 0x01 03753 #define PCI_SUBCLASS_BR_EISA 0x02 03754 #define PCI_SUBCLASS_BR_MCA 0x03 03755 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 03756 #define PCI_SUBCLASS_BR_PCMCIA 0x05 03757 #define PCI_SUBCLASS_BR_NUBUS 0x06 03758 #define PCI_SUBCLASS_BR_CARDBUS 0x07 03759 #define PCI_SUBCLASS_BR_RACEWAY 0x08 03760 #define PCI_SUBCLASS_BR_OTHER 0x80 03761 03762 #define PCI_SUBCLASS_COM_SERIAL 0x00 03763 #define PCI_SUBCLASS_COM_PARALLEL 0x01 03764 #define PCI_SUBCLASS_COM_MULTIPORT 0x02 03765 #define PCI_SUBCLASS_COM_MODEM 0x03 03766 #define PCI_SUBCLASS_COM_OTHER 0x80 03767 03768 #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00 03769 #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01 03770 #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02 03771 #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03 03772 #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04 03773 #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05 03774 #define PCI_SUBCLASS_SYS_OTHER 0x80 03775 03776 #define PCI_SUBCLASS_INP_KEYBOARD 0x00 03777 #define PCI_SUBCLASS_INP_DIGITIZER 0x01 03778 #define PCI_SUBCLASS_INP_MOUSE 0x02 03779 #define PCI_SUBCLASS_INP_SCANNER 0x03 03780 #define PCI_SUBCLASS_INP_GAMEPORT 0x04 03781 #define PCI_SUBCLASS_INP_OTHER 0x80 03782 03783 #define PCI_SUBCLASS_DOC_GENERIC 0x00 03784 #define PCI_SUBCLASS_DOC_OTHER 0x80 03785 03786 #define PCI_SUBCLASS_PROC_386 0x00 03787 #define PCI_SUBCLASS_PROC_486 0x01 03788 #define PCI_SUBCLASS_PROC_PENTIUM 0x02 03789 #define PCI_SUBCLASS_PROC_ALPHA 0x10 03790 #define PCI_SUBCLASS_PROC_POWERPC 0x20 03791 #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40 03792 03793 /* PCI device subclasses for class C (serial bus controller)*/ 03794 #define PCI_SUBCLASS_SB_IEEE1394 0x00 03795 #define PCI_SUBCLASS_SB_ACCESS 0x01 03796 #define PCI_SUBCLASS_SB_SSA 0x02 03797 #define PCI_SUBCLASS_SB_USB 0x03 03798 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 03799 #define PCI_SUBCLASS_SB_SMBUS 0x05 03800 03801 #define PCI_SUBCLASS_WIRELESS_IRDA 0x00 03802 #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01 03803 #define PCI_SUBCLASS_WIRELESS_RF 0x10 03804 #define PCI_SUBCLASS_WIRELESS_OTHER 0x80 03805 03806 #define PCI_SUBCLASS_INTIO_I2O 0x00 03807 03808 #define PCI_SUBCLASS_SAT_TV 0x01 03809 #define PCI_SUBCLASS_SAT_AUDIO 0x02 03810 #define PCI_SUBCLASS_SAT_VOICE 0x03 03811 #define PCI_SUBCLASS_SAT_DATA 0x04 03812 03813 #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00 03814 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10 03815 #define PCI_SUBCLASS_CRYPTO_OTHER 0x80 03816 03817 #define PCI_SUBCLASS_DASP_DPIO 0x00 03818 #define PCI_SUBCLASS_DASP_OTHER 0x80 03819 03820 #define PCI_ADDRESS_IO_SPACE 0x00000001 03821 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 03822 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 03823 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc 03824 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 03825 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 03826 03827 #define PCI_TYPE_32BIT 0 03828 #define PCI_TYPE_20BIT 2 03829 #define PCI_TYPE_64BIT 4 03830 03831 #define PCI_ROMADDRESS_ENABLED 0x00000001 03832 03833 #endif /* _PCI_X_ */ 03834 03835 #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1 03836 03837 _IRQL_requires_max_(PASSIVE_LEVEL) 03838 _Must_inspect_result_ 03839 typedef NTSTATUS 03840 (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( 03841 _Inout_ PVOID Context); 03842 typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE; 03843 03844 _IRQL_requires_max_(PASSIVE_LEVEL) 03845 _Must_inspect_result_ 03846 typedef NTSTATUS 03847 (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( 03848 _Inout_ PVOID Context); 03849 typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE; 03850 03851 typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE { 03852 USHORT Size; 03853 USHORT Version; 03854 PVOID Context; 03855 PINTERFACE_REFERENCE InterfaceReference; 03856 PINTERFACE_DEREFERENCE InterfaceDereference; 03857 PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode; 03858 PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode; 03859 } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE; 03860 03861 #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1 03862 03863 typedef ULONG 03864 (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( 03865 _In_ PVOID Context, 03866 _Out_writes_bytes_(Length) PVOID Buffer, 03867 _In_ ULONG Offset, 03868 _In_ ULONG Length); 03869 03870 typedef ULONG 03871 (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( 03872 _In_ PVOID Context, 03873 _In_reads_bytes_(Length) PVOID Buffer, 03874 _In_ ULONG Offset, 03875 _In_ ULONG Length); 03876 03877 typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE { 03878 USHORT Size; 03879 USHORT Version; 03880 PVOID Context; 03881 PINTERFACE_REFERENCE InterfaceReference; 03882 PINTERFACE_DEREFERENCE InterfaceDereference; 03883 PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace; 03884 PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace; 03885 } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE; 03886 03887 #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1 03888 03889 _Must_inspect_result_ 03890 typedef NTSTATUS 03891 (NTAPI PCI_MSIX_SET_ENTRY)( 03892 _In_ PVOID Context, 03893 _In_ ULONG TableEntry, 03894 _In_ ULONG MessageNumber); 03895 typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY; 03896 03897 _Must_inspect_result_ 03898 typedef NTSTATUS 03899 (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( 03900 _In_ PVOID Context, 03901 _In_ ULONG TableEntry); 03902 typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY; 03903 03904 _Must_inspect_result_ 03905 typedef NTSTATUS 03906 (NTAPI PCI_MSIX_GET_ENTRY)( 03907 _In_ PVOID Context, 03908 _In_ ULONG TableEntry, 03909 _Out_ PULONG MessageNumber, 03910 _Out_ PBOOLEAN Masked); 03911 typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY; 03912 03913 _Must_inspect_result_ 03914 typedef NTSTATUS 03915 (NTAPI PCI_MSIX_GET_TABLE_SIZE)( 03916 _In_ PVOID Context, 03917 _Out_ PULONG TableSize); 03918 typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE; 03919 03920 typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE { 03921 USHORT Size; 03922 USHORT Version; 03923 PVOID Context; 03924 PINTERFACE_REFERENCE InterfaceReference; 03925 PINTERFACE_DEREFERENCE InterfaceDereference; 03926 PPCI_MSIX_SET_ENTRY SetTableEntry; 03927 PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry; 03928 PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry; 03929 PPCI_MSIX_GET_ENTRY GetTableEntry; 03930 PPCI_MSIX_GET_TABLE_SIZE GetTableSize; 03931 } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE; 03932 03933 #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \ 03934 RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry) 03935 03936 $endif (_WDMDDK_) 03937 $if (_NTDDK_) 03938 #ifndef _ARC_DDK_ 03939 #define _ARC_DDK_ 03940 typedef enum _CONFIGURATION_TYPE { 03941 ArcSystem, 03942 CentralProcessor, 03943 FloatingPointProcessor, 03944 PrimaryIcache, 03945 PrimaryDcache, 03946 SecondaryIcache, 03947 SecondaryDcache, 03948 SecondaryCache, 03949 EisaAdapter, 03950 TcAdapter, 03951 ScsiAdapter, 03952 DtiAdapter, 03953 MultiFunctionAdapter, 03954 DiskController, 03955 TapeController, 03956 CdromController, 03957 WormController, 03958 SerialController, 03959 NetworkController, 03960 DisplayController, 03961 ParallelController, 03962 PointerController, 03963 KeyboardController, 03964 AudioController, 03965 OtherController, 03966 DiskPeripheral, 03967 FloppyDiskPeripheral, 03968 TapePeripheral, 03969 ModemPeripheral, 03970 MonitorPeripheral, 03971 PrinterPeripheral, 03972 PointerPeripheral, 03973 KeyboardPeripheral, 03974 TerminalPeripheral, 03975 OtherPeripheral, 03976 LinePeripheral, 03977 NetworkPeripheral, 03978 SystemMemory, 03979 DockingInformation, 03980 RealModeIrqRoutingTable, 03981 RealModePCIEnumeration, 03982 MaximumType 03983 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; 03984 #endif /* !_ARC_DDK_ */ 03985 03986 /* 03987 ** IRP function codes 03988 */ 03989 03990 #define IRP_MN_QUERY_DIRECTORY 0x01 03991 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 03992 03993 #define IRP_MN_USER_FS_REQUEST 0x00 03994 #define IRP_MN_MOUNT_VOLUME 0x01 03995 #define IRP_MN_VERIFY_VOLUME 0x02 03996 #define IRP_MN_LOAD_FILE_SYSTEM 0x03 03997 #define IRP_MN_TRACK_LINK 0x04 03998 #define IRP_MN_KERNEL_CALL 0x04 03999 04000 #define IRP_MN_LOCK 0x01 04001 #define IRP_MN_UNLOCK_SINGLE 0x02 04002 #define IRP_MN_UNLOCK_ALL 0x03 04003 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 04004 04005 #define IRP_MN_FLUSH_AND_PURGE 0x01 04006 04007 #define IRP_MN_NORMAL 0x00 04008 #define IRP_MN_DPC 0x01 04009 #define IRP_MN_MDL 0x02 04010 #define IRP_MN_COMPLETE 0x04 04011 #define IRP_MN_COMPRESSED 0x08 04012 04013 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) 04014 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) 04015 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) 04016 04017 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 04018 04019 #define IO_CHECK_CREATE_PARAMETERS 0x0200 04020 #define IO_ATTACH_DEVICE 0x0400 04021 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 04022 04023 typedef NTSTATUS 04024 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)( 04025 _In_ PVOID Context, 04026 _In_ PUNICODE_STRING PathName, 04027 _In_ INTERFACE_TYPE BusType, 04028 _In_ ULONG BusNumber, 04029 _In_ PKEY_VALUE_FULL_INFORMATION *BusInformation, 04030 _In_ CONFIGURATION_TYPE ControllerType, 04031 _In_ ULONG ControllerNumber, 04032 _In_ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, 04033 _In_ CONFIGURATION_TYPE PeripheralType, 04034 _In_ ULONG PeripheralNumber, 04035 _In_ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); 04036 04037 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { 04038 IoQueryDeviceIdentifier = 0, 04039 IoQueryDeviceConfigurationData, 04040 IoQueryDeviceComponentInformation, 04041 IoQueryDeviceMaxData 04042 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; 04043 04044 typedef VOID 04045 (NTAPI *PDRIVER_REINITIALIZE)( 04046 _In_ struct _DRIVER_OBJECT *DriverObject, 04047 _In_opt_ PVOID Context, 04048 _In_ ULONG Count); 04049 04050 typedef struct _CONTROLLER_OBJECT { 04051 CSHORT Type; 04052 CSHORT Size; 04053 PVOID ControllerExtension; 04054 KDEVICE_QUEUE DeviceWaitQueue; 04055 ULONG Spare1; 04056 LARGE_INTEGER Spare2; 04057 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; 04058 04059 #define DRVO_REINIT_REGISTERED 0x00000008 04060 #define DRVO_INITIALIZED 0x00000010 04061 #define DRVO_BOOTREINIT_REGISTERED 0x00000020 04062 #define DRVO_LEGACY_RESOURCES 0x00000040 04063 04064 typedef struct _CONFIGURATION_INFORMATION { 04065 ULONG DiskCount; 04066 ULONG FloppyCount; 04067 ULONG CdRomCount; 04068 ULONG TapeCount; 04069 ULONG ScsiPortCount; 04070 ULONG SerialCount; 04071 ULONG ParallelCount; 04072 BOOLEAN AtDiskPrimaryAddressClaimed; 04073 BOOLEAN AtDiskSecondaryAddressClaimed; 04074 ULONG Version; 04075 ULONG MediumChangerCount; 04076 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; 04077 04078 typedef struct _DISK_SIGNATURE { 04079 ULONG PartitionStyle; 04080 _ANONYMOUS_UNION union { 04081 struct { 04082 ULONG Signature; 04083 ULONG CheckSum; 04084 } Mbr; 04085 struct { 04086 GUID DiskId; 04087 } Gpt; 04088 } DUMMYUNIONNAME; 04089 } DISK_SIGNATURE, *PDISK_SIGNATURE; 04090 04091 typedef struct _TXN_PARAMETER_BLOCK { 04092 USHORT Length; 04093 USHORT TxFsContext; 04094 PVOID TransactionObject; 04095 } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK; 04096 04097 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE) 04098 04099 typedef struct _IO_DRIVER_CREATE_CONTEXT { 04100 CSHORT Size; 04101 struct _ECP_LIST *ExtraCreateParameter; 04102 PVOID DeviceObjectHint; 04103 PTXN_PARAMETER_BLOCK TxnParameters; 04104 } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT; 04105 04106 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD { 04107 USHORT Size; 04108 USHORT Version; 04109 PVOID Context; 04110 PINTERFACE_REFERENCE InterfaceReference; 04111 PINTERFACE_DEREFERENCE InterfaceDereference; 04112 PGET_SET_DEVICE_DATA SetBusData; 04113 PGET_SET_DEVICE_DATA GetBusData; 04114 UCHAR CapabilityID; 04115 } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD; 04116 04117 _IRQL_requires_max_(PASSIVE_LEVEL) 04118 _Must_inspect_result_ 04119 typedef NTSTATUS 04120 (NTAPI *PGET_LOCATION_STRING)( 04121 _Inout_opt_ PVOID Context, 04122 _Outptr_ 04123 _At_(*LocationStrings, 04124 _When_(return == 0, __drv_allocatesMem(Mem))) 04125 PZZWSTR *LocationStrings); 04126 04127 typedef struct _PNP_LOCATION_INTERFACE { 04128 USHORT Size; 04129 USHORT Version; 04130 PVOID Context; 04131 PINTERFACE_REFERENCE InterfaceReference; 04132 PINTERFACE_DEREFERENCE InterfaceDereference; 04133 PGET_LOCATION_STRING GetLocationString; 04134 } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE; 04135 04136 typedef enum _ARBITER_ACTION { 04137 ArbiterActionTestAllocation, 04138 ArbiterActionRetestAllocation, 04139 ArbiterActionCommitAllocation, 04140 ArbiterActionRollbackAllocation, 04141 ArbiterActionQueryAllocatedResources, 04142 ArbiterActionWriteReservedResources, 04143 ArbiterActionQueryConflict, 04144 ArbiterActionQueryArbitrate, 04145 ArbiterActionAddReserved, 04146 ArbiterActionBootAllocation 04147 } ARBITER_ACTION, *PARBITER_ACTION; 04148 04149 typedef struct _ARBITER_CONFLICT_INFO { 04150 PDEVICE_OBJECT OwningObject; 04151 ULONGLONG Start; 04152 ULONGLONG End; 04153 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; 04154 04155 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS { 04156 _Inout_ PLIST_ENTRY ArbitrationList; 04157 _In_ ULONG AllocateFromCount; 04158 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 04159 } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS; 04160 04161 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS { 04162 _Inout_ PLIST_ENTRY ArbitrationList; 04163 _In_ ULONG AllocateFromCount; 04164 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; 04165 } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS; 04166 04167 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS { 04168 _Inout_ PLIST_ENTRY ArbitrationList; 04169 } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS; 04170 04171 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS { 04172 _Out_ PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; 04173 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS; 04174 04175 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS { 04176 _In_ PDEVICE_OBJECT PhysicalDeviceObject; 04177 _In_ PIO_RESOURCE_DESCRIPTOR ConflictingResource; 04178 _Out_ PULONG ConflictCount; 04179 _Out_ PARBITER_CONFLICT_INFO *Conflicts; 04180 } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS; 04181 04182 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS { 04183 _In_ PLIST_ENTRY ArbitrationList; 04184 } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS; 04185 04186 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS { 04187 _In_ PDEVICE_OBJECT ReserveDevice; 04188 } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS; 04189 04190 typedef struct _ARBITER_PARAMETERS { 04191 union { 04192 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation; 04193 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation; 04194 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation; 04195 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources; 04196 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict; 04197 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate; 04198 ARBITER_ADD_RESERVED_PARAMETERS AddReserved; 04199 } Parameters; 04200 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS; 04201 04202 typedef enum _ARBITER_REQUEST_SOURCE { 04203 ArbiterRequestUndefined = -1, 04204 ArbiterRequestLegacyReported, 04205 ArbiterRequestHalReported, 04206 ArbiterRequestLegacyAssigned, 04207 ArbiterRequestPnpDetected, 04208 ArbiterRequestPnpEnumerated 04209 } ARBITER_REQUEST_SOURCE; 04210 04211 typedef enum _ARBITER_RESULT { 04212 ArbiterResultUndefined = -1, 04213 ArbiterResultSuccess, 04214 ArbiterResultExternalConflict, 04215 ArbiterResultNullRequest 04216 } ARBITER_RESULT; 04217 04218 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001 04219 04220 typedef struct _ARBITER_LIST_ENTRY { 04221 LIST_ENTRY ListEntry; 04222 ULONG AlternativeCount; 04223 PIO_RESOURCE_DESCRIPTOR Alternatives; 04224 PDEVICE_OBJECT PhysicalDeviceObject; 04225 ARBITER_REQUEST_SOURCE RequestSource; 04226 ULONG Flags; 04227 LONG_PTR WorkSpace; 04228 INTERFACE_TYPE InterfaceType; 04229 ULONG SlotNumber; 04230 ULONG BusNumber; 04231 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment; 04232 PIO_RESOURCE_DESCRIPTOR SelectedAlternative; 04233 ARBITER_RESULT Result; 04234 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY; 04235 04236 typedef NTSTATUS 04237 (NTAPI *PARBITER_HANDLER)( 04238 _Inout_opt_ PVOID Context, 04239 _In_ ARBITER_ACTION Action, 04240 _Inout_ PARBITER_PARAMETERS Parameters); 04241 04242 #define ARBITER_PARTIAL 0x00000001 04243 04244 typedef struct _ARBITER_INTERFACE { 04245 USHORT Size; 04246 USHORT Version; 04247 PVOID Context; 04248 PINTERFACE_REFERENCE InterfaceReference; 04249 PINTERFACE_DEREFERENCE InterfaceDereference; 04250 PARBITER_HANDLER ArbiterHandler; 04251 ULONG Flags; 04252 } ARBITER_INTERFACE, *PARBITER_INTERFACE; 04253 04254 typedef enum _RESOURCE_TRANSLATION_DIRECTION { 04255 TranslateChildToParent, 04256 TranslateParentToChild 04257 } RESOURCE_TRANSLATION_DIRECTION; 04258 04259 typedef NTSTATUS 04260 (NTAPI *PTRANSLATE_RESOURCE_HANDLER)( 04261 _Inout_opt_ PVOID Context, 04262 _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, 04263 _In_ RESOURCE_TRANSLATION_DIRECTION Direction, 04264 _In_opt_ ULONG AlternativesCount, 04265 _In_reads_opt_(AlternativesCount) IO_RESOURCE_DESCRIPTOR Alternatives[], 04266 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 04267 _Out_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); 04268 04269 typedef NTSTATUS 04270 (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( 04271 _Inout_opt_ PVOID Context, 04272 _In_ PIO_RESOURCE_DESCRIPTOR Source, 04273 _In_ PDEVICE_OBJECT PhysicalDeviceObject, 04274 _Out_ PULONG TargetCount, 04275 _Out_writes_(*TargetCount) PIO_RESOURCE_DESCRIPTOR *Target); 04276 04277 typedef struct _TRANSLATOR_INTERFACE { 04278 USHORT Size; 04279 USHORT Version; 04280 PVOID Context; 04281 PINTERFACE_REFERENCE InterfaceReference; 04282 PINTERFACE_DEREFERENCE InterfaceDereference; 04283 PTRANSLATE_RESOURCE_HANDLER TranslateResources; 04284 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; 04285 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; 04286 04287 typedef struct _PCI_AGP_CAPABILITY { 04288 PCI_CAPABILITIES_HEADER Header; 04289 USHORT Minor:4; 04290 USHORT Major:4; 04291 USHORT Rsvd1:8; 04292 struct _PCI_AGP_STATUS { 04293 ULONG Rate:3; 04294 ULONG Agp3Mode:1; 04295 ULONG FastWrite:1; 04296 ULONG FourGB:1; 04297 ULONG HostTransDisable:1; 04298 ULONG Gart64:1; 04299 ULONG ITA_Coherent:1; 04300 ULONG SideBandAddressing:1; 04301 ULONG CalibrationCycle:3; 04302 ULONG AsyncRequestSize:3; 04303 ULONG Rsvd1:1; 04304 ULONG Isoch:1; 04305 ULONG Rsvd2:6; 04306 ULONG RequestQueueDepthMaximum:8; 04307 } AGPStatus; 04308 struct _PCI_AGP_COMMAND { 04309 ULONG Rate:3; 04310 ULONG Rsvd1:1; 04311 ULONG FastWriteEnable:1; 04312 ULONG FourGBEnable:1; 04313 ULONG Rsvd2:1; 04314 ULONG Gart64:1; 04315 ULONG AGPEnable:1; 04316 ULONG SBAEnable:1; 04317 ULONG CalibrationCycle:3; 04318 ULONG AsyncReqSize:3; 04319 ULONG Rsvd3:8; 04320 ULONG RequestQueueDepth:8; 04321 } AGPCommand; 04322 } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY; 04323 04324 typedef enum _EXTENDED_AGP_REGISTER { 04325 IsochStatus, 04326 AgpControl, 04327 ApertureSize, 04328 AperturePageSize, 04329 GartLow, 04330 GartHigh, 04331 IsochCommand 04332 } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER; 04333 04334 typedef struct _PCI_AGP_ISOCH_STATUS { 04335 ULONG ErrorCode:2; 04336 ULONG Rsvd1:1; 04337 ULONG Isoch_L:3; 04338 ULONG Isoch_Y:2; 04339 ULONG Isoch_N:8; 04340 ULONG Rsvd2:16; 04341 } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS; 04342 04343 typedef struct _PCI_AGP_CONTROL { 04344 ULONG Rsvd1:7; 04345 ULONG GTLB_Enable:1; 04346 ULONG AP_Enable:1; 04347 ULONG CAL_Disable:1; 04348 ULONG Rsvd2:22; 04349 } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL; 04350 04351 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE { 04352 USHORT PageSizeMask:11; 04353 USHORT Rsvd1:1; 04354 USHORT PageSizeSelect:4; 04355 } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE; 04356 04357 typedef struct _PCI_AGP_ISOCH_COMMAND { 04358 USHORT Rsvd1:6; 04359 USHORT Isoch_Y:2; 04360 USHORT Isoch_N:8; 04361 } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND; 04362 04363 typedef struct PCI_AGP_EXTENDED_CAPABILITY { 04364 PCI_AGP_ISOCH_STATUS IsochStatus; 04365 PCI_AGP_CONTROL AgpControl; 04366 USHORT ApertureSize; 04367 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize; 04368 ULONG GartLow; 04369 ULONG GartHigh; 04370 PCI_AGP_ISOCH_COMMAND IsochCommand; 04371 } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY; 04372 04373 #define PCI_AGP_RATE_1X 0x1 04374 #define PCI_AGP_RATE_2X 0x2 04375 #define PCI_AGP_RATE_4X 0x4 04376 04377 #define PCIX_MODE_CONVENTIONAL_PCI 0x0 04378 #define PCIX_MODE1_66MHZ 0x1 04379 #define PCIX_MODE1_100MHZ 0x2 04380 #define PCIX_MODE1_133MHZ 0x3 04381 #define PCIX_MODE2_266_66MHZ 0x9 04382 #define PCIX_MODE2_266_100MHZ 0xA 04383 #define PCIX_MODE2_266_133MHZ 0xB 04384 #define PCIX_MODE2_533_66MHZ 0xD 04385 #define PCIX_MODE2_533_100MHZ 0xE 04386 #define PCIX_MODE2_533_133MHZ 0xF 04387 04388 #define PCIX_VERSION_MODE1_ONLY 0x0 04389 #define PCIX_VERSION_MODE2_ECC 0x1 04390 #define PCIX_VERSION_DUAL_MODE_ECC 0x2 04391 04392 typedef struct _PCIX_BRIDGE_CAPABILITY { 04393 PCI_CAPABILITIES_HEADER Header; 04394 union { 04395 _ANONYMOUS_STRUCT struct { 04396 USHORT Bus64Bit:1; 04397 USHORT Bus133MHzCapable:1; 04398 USHORT SplitCompletionDiscarded:1; 04399 USHORT UnexpectedSplitCompletion:1; 04400 USHORT SplitCompletionOverrun:1; 04401 USHORT SplitRequestDelayed:1; 04402 USHORT BusModeFrequency:4; 04403 USHORT Rsvd:2; 04404 USHORT Version:2; 04405 USHORT Bus266MHzCapable:1; 04406 USHORT Bus533MHzCapable:1; 04407 } DUMMYSTRUCTNAME; 04408 USHORT AsUSHORT; 04409 } SecondaryStatus; 04410 union { 04411 _ANONYMOUS_STRUCT struct { 04412 ULONG FunctionNumber:3; 04413 ULONG DeviceNumber:5; 04414 ULONG BusNumber:8; 04415 ULONG Device64Bit:1; 04416 ULONG Device133MHzCapable:1; 04417 ULONG SplitCompletionDiscarded:1; 04418 ULONG UnexpectedSplitCompletion:1; 04419 ULONG SplitCompletionOverrun:1; 04420 ULONG SplitRequestDelayed:1; 04421 ULONG Rsvd:7; 04422 ULONG DIMCapable:1; 04423 ULONG Device266MHzCapable:1; 04424 ULONG Device533MHzCapable:1; 04425 } DUMMYSTRUCTNAME; 04426 ULONG AsULONG; 04427 } BridgeStatus; 04428 USHORT UpstreamSplitTransactionCapacity; 04429 USHORT UpstreamSplitTransactionLimit; 04430 USHORT DownstreamSplitTransactionCapacity; 04431 USHORT DownstreamSplitTransactionLimit; 04432 union { 04433 _ANONYMOUS_STRUCT struct { 04434 ULONG SelectSecondaryRegisters:1; 04435 ULONG ErrorPresentInOtherBank:1; 04436 ULONG AdditionalCorrectableError:1; 04437 ULONG AdditionalUncorrectableError:1; 04438 ULONG ErrorPhase:3; 04439 ULONG ErrorCorrected:1; 04440 ULONG Syndrome:8; 04441 ULONG ErrorFirstCommand:4; 04442 ULONG ErrorSecondCommand:4; 04443 ULONG ErrorUpperAttributes:4; 04444 ULONG ControlUpdateEnable:1; 04445 ULONG Rsvd:1; 04446 ULONG DisableSingleBitCorrection:1; 04447 ULONG EccMode:1; 04448 } DUMMYSTRUCTNAME; 04449 ULONG AsULONG; 04450 } EccControlStatus; 04451 ULONG EccFirstAddress; 04452 ULONG EccSecondAddress; 04453 ULONG EccAttribute; 04454 } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY; 04455 04456 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY { 04457 PCI_CAPABILITIES_HEADER Header; 04458 USHORT Reserved; 04459 USHORT SubVendorID; 04460 USHORT SubSystemID; 04461 } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY; 04462 04463 #define OSC_FIRMWARE_FAILURE 0x02 04464 #define OSC_UNRECOGNIZED_UUID 0x04 04465 #define OSC_UNRECOGNIZED_REVISION 0x08 04466 #define OSC_CAPABILITIES_MASKED 0x10 04467 04468 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01 04469 04470 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD { 04471 union { 04472 _ANONYMOUS_STRUCT struct { 04473 ULONG ExtendedConfigOpRegions:1; 04474 ULONG ActiveStatePowerManagement:1; 04475 ULONG ClockPowerManagement:1; 04476 ULONG SegmentGroups:1; 04477 ULONG MessageSignaledInterrupts:1; 04478 ULONG WindowsHardwareErrorArchitecture:1; 04479 ULONG Reserved:26; 04480 } DUMMYSTRUCTNAME; 04481 ULONG AsULONG; 04482 } u; 04483 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD; 04484 04485 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD { 04486 union { 04487 _ANONYMOUS_STRUCT struct { 04488 ULONG ExpressNativeHotPlug:1; 04489 ULONG ShpcNativeHotPlug:1; 04490 ULONG ExpressNativePME:1; 04491 ULONG ExpressAdvancedErrorReporting:1; 04492 ULONG ExpressCapabilityStructure:1; 04493 ULONG Reserved:27; 04494 } DUMMYSTRUCTNAME; 04495 ULONG AsULONG; 04496 } u; 04497 } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD; 04498 04499 typedef enum _PCI_HARDWARE_INTERFACE { 04500 PciConventional, 04501 PciXMode1, 04502 PciXMode2, 04503 PciExpress 04504 } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE; 04505 04506 typedef enum { 04507 BusWidth32Bits, 04508 BusWidth64Bits 04509 } PCI_BUS_WIDTH; 04510 04511 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY { 04512 PCI_HARDWARE_INTERFACE SecondaryInterface; 04513 _ANONYMOUS_STRUCT struct { 04514 BOOLEAN BusCapabilitiesFound; 04515 ULONG CurrentSpeedAndMode; 04516 ULONG SupportedSpeedsAndModes; 04517 BOOLEAN DeviceIDMessagingCapable; 04518 PCI_BUS_WIDTH SecondaryBusWidth; 04519 } DUMMYSTRUCTNAME; 04520 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport; 04521 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest; 04522 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted; 04523 } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY; 04524 04525 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER { 04526 _ANONYMOUS_STRUCT struct { 04527 USHORT CapabilityVersion:4; 04528 USHORT DeviceType:4; 04529 USHORT SlotImplemented:1; 04530 USHORT InterruptMessageNumber:5; 04531 USHORT Rsvd:2; 04532 } DUMMYSTRUCTNAME; 04533 USHORT AsUSHORT; 04534 } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER; 04535 04536 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER { 04537 _ANONYMOUS_STRUCT struct { 04538 ULONG MaxPayloadSizeSupported:3; 04539 ULONG PhantomFunctionsSupported:2; 04540 ULONG ExtendedTagSupported:1; 04541 ULONG L0sAcceptableLatency:3; 04542 ULONG L1AcceptableLatency:3; 04543 ULONG Undefined:3; 04544 ULONG RoleBasedErrorReporting:1; 04545 ULONG Rsvd1:2; 04546 ULONG CapturedSlotPowerLimit:8; 04547 ULONG CapturedSlotPowerLimitScale:2; 04548 ULONG Rsvd2:4; 04549 } DUMMYSTRUCTNAME; 04550 ULONG AsULONG; 04551 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER; 04552 04553 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07; 04554 04555 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER { 04556 _ANONYMOUS_STRUCT struct { 04557 USHORT CorrectableErrorEnable:1; 04558 USHORT NonFatalErrorEnable:1; 04559 USHORT FatalErrorEnable:1; 04560 USHORT UnsupportedRequestErrorEnable:1; 04561 USHORT EnableRelaxedOrder:1; 04562 USHORT MaxPayloadSize:3; 04563 USHORT ExtendedTagEnable:1; 04564 USHORT PhantomFunctionsEnable:1; 04565 USHORT AuxPowerEnable:1; 04566 USHORT NoSnoopEnable:1; 04567 USHORT MaxReadRequestSize:3; 04568 USHORT BridgeConfigRetryEnable:1; 04569 } DUMMYSTRUCTNAME; 04570 USHORT AsUSHORT; 04571 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER; 04572 04573 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F; 04574 04575 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER { 04576 _ANONYMOUS_STRUCT struct { 04577 USHORT CorrectableErrorDetected:1; 04578 USHORT NonFatalErrorDetected:1; 04579 USHORT FatalErrorDetected:1; 04580 USHORT UnsupportedRequestDetected:1; 04581 USHORT AuxPowerDetected:1; 04582 USHORT TransactionsPending:1; 04583 USHORT Rsvd:10; 04584 } DUMMYSTRUCTNAME; 04585 USHORT AsUSHORT; 04586 } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER; 04587 04588 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER { 04589 _ANONYMOUS_STRUCT struct { 04590 ULONG MaximumLinkSpeed:4; 04591 ULONG MaximumLinkWidth:6; 04592 ULONG ActiveStatePMSupport:2; 04593 ULONG L0sExitLatency:3; 04594 ULONG L1ExitLatency:3; 04595 ULONG ClockPowerManagement:1; 04596 ULONG SurpriseDownErrorReportingCapable:1; 04597 ULONG DataLinkLayerActiveReportingCapable:1; 04598 ULONG Rsvd:3; 04599 ULONG PortNumber:8; 04600 } DUMMYSTRUCTNAME; 04601 ULONG AsULONG; 04602 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER; 04603 04604 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER { 04605 _ANONYMOUS_STRUCT struct { 04606 USHORT ActiveStatePMControl:2; 04607 USHORT Rsvd1:1; 04608 USHORT ReadCompletionBoundary:1; 04609 USHORT LinkDisable:1; 04610 USHORT RetrainLink:1; 04611 USHORT CommonClockConfig:1; 04612 USHORT ExtendedSynch:1; 04613 USHORT EnableClockPowerManagement:1; 04614 USHORT Rsvd2:7; 04615 } DUMMYSTRUCTNAME; 04616 USHORT AsUSHORT; 04617 } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER; 04618 04619 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER { 04620 _ANONYMOUS_STRUCT struct { 04621 USHORT LinkSpeed:4; 04622 USHORT LinkWidth:6; 04623 USHORT Undefined:1; 04624 USHORT LinkTraining:1; 04625 USHORT SlotClockConfig:1; 04626 USHORT DataLinkLayerActive:1; 04627 USHORT Rsvd:2; 04628 } DUMMYSTRUCTNAME; 04629 USHORT AsUSHORT; 04630 } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER; 04631 04632 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER { 04633 _ANONYMOUS_STRUCT struct { 04634 ULONG AttentionButtonPresent:1; 04635 ULONG PowerControllerPresent:1; 04636 ULONG MRLSensorPresent:1; 04637 ULONG AttentionIndicatorPresent:1; 04638 ULONG PowerIndicatorPresent:1; 04639 ULONG HotPlugSurprise:1; 04640 ULONG HotPlugCapable:1; 04641 ULONG SlotPowerLimit:8; 04642 ULONG SlotPowerLimitScale:2; 04643 ULONG ElectromechanicalLockPresent:1; 04644 ULONG NoCommandCompletedSupport:1; 04645 ULONG PhysicalSlotNumber:13; 04646 } DUMMYSTRUCTNAME; 04647 ULONG AsULONG; 04648 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER; 04649 04650 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER { 04651 _ANONYMOUS_STRUCT struct { 04652 USHORT AttentionButtonEnable:1; 04653 USHORT PowerFaultDetectEnable:1; 04654 USHORT MRLSensorEnable:1; 04655 USHORT PresenceDetectEnable:1; 04656 USHORT CommandCompletedEnable:1; 04657 USHORT HotPlugInterruptEnable:1; 04658 USHORT AttentionIndicatorControl:2; 04659 USHORT PowerIndicatorControl:2; 04660 USHORT PowerControllerControl:1; 04661 USHORT ElectromechanicalLockControl:1; 04662 USHORT DataLinkStateChangeEnable:1; 04663 USHORT Rsvd:3; 04664 } DUMMYSTRUCTNAME; 04665 USHORT AsUSHORT; 04666 } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER; 04667 04668 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER { 04669 _ANONYMOUS_STRUCT struct { 04670 USHORT AttentionButtonPressed:1; 04671 USHORT PowerFaultDetected:1; 04672 USHORT MRLSensorChanged:1; 04673 USHORT PresenceDetectChanged:1; 04674 USHORT CommandCompleted:1; 04675 USHORT MRLSensorState:1; 04676 USHORT PresenceDetectState:1; 04677 USHORT ElectromechanicalLockEngaged:1; 04678 USHORT DataLinkStateChanged:1; 04679 USHORT Rsvd:7; 04680 } DUMMYSTRUCTNAME; 04681 USHORT AsUSHORT; 04682 } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER; 04683 04684 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER { 04685 _ANONYMOUS_STRUCT struct { 04686 USHORT CorrectableSerrEnable:1; 04687 USHORT NonFatalSerrEnable:1; 04688 USHORT FatalSerrEnable:1; 04689 USHORT PMEInterruptEnable:1; 04690 USHORT CRSSoftwareVisibilityEnable:1; 04691 USHORT Rsvd:11; 04692 } DUMMYSTRUCTNAME; 04693 USHORT AsUSHORT; 04694 } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER; 04695 04696 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER { 04697 _ANONYMOUS_STRUCT struct { 04698 USHORT CRSSoftwareVisibility:1; 04699 USHORT Rsvd:15; 04700 } DUMMYSTRUCTNAME; 04701 USHORT AsUSHORT; 04702 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER; 04703 04704 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER { 04705 _ANONYMOUS_STRUCT struct { 04706 ULONG PMERequestorId:16; 04707 ULONG PMEStatus:1; 04708 ULONG PMEPending:1; 04709 ULONG Rsvd:14; 04710 } DUMMYSTRUCTNAME; 04711 ULONG AsULONG; 04712 } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER; 04713 04714 typedef struct _PCI_EXPRESS_CAPABILITY { 04715 PCI_CAPABILITIES_HEADER Header; 04716 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities; 04717 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities; 04718 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl; 04719 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus; 04720 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities; 04721 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl; 04722 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus; 04723 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities; 04724 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl; 04725 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus; 04726 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl; 04727 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities; 04728 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus; 04729 } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY; 04730 04731 typedef enum { 04732 MRLClosed = 0, 04733 MRLOpen 04734 } PCI_EXPRESS_MRL_STATE; 04735 04736 typedef enum { 04737 SlotEmpty = 0, 04738 CardPresent 04739 } PCI_EXPRESS_CARD_PRESENCE; 04740 04741 typedef enum { 04742 IndicatorOn = 1, 04743 IndicatorBlink, 04744 IndicatorOff 04745 } PCI_EXPRESS_INDICATOR_STATE; 04746 04747 typedef enum { 04748 PowerOn = 0, 04749 PowerOff 04750 } PCI_EXPRESS_POWER_STATE; 04751 04752 typedef enum { 04753 L0sEntrySupport = 1, 04754 L0sAndL1EntrySupport = 3 04755 } PCI_EXPRESS_ASPM_SUPPORT; 04756 04757 typedef enum { 04758 L0sAndL1EntryDisabled, 04759 L0sEntryEnabled, 04760 L1EntryEnabled, 04761 L0sAndL1EntryEnabled 04762 } PCI_EXPRESS_ASPM_CONTROL; 04763 04764 typedef enum { 04765 L0s_Below64ns = 0, 04766 L0s_64ns_128ns, 04767 L0s_128ns_256ns, 04768 L0s_256ns_512ns, 04769 L0s_512ns_1us, 04770 L0s_1us_2us, 04771 L0s_2us_4us, 04772 L0s_Above4us 04773 } PCI_EXPRESS_L0s_EXIT_LATENCY; 04774 04775 typedef enum { 04776 L1_Below1us = 0, 04777 L1_1us_2us, 04778 L1_2us_4us, 04779 L1_4us_8us, 04780 L1_8us_16us, 04781 L1_16us_32us, 04782 L1_32us_64us, 04783 L1_Above64us 04784 } PCI_EXPRESS_L1_EXIT_LATENCY; 04785 04786 typedef enum { 04787 PciExpressEndpoint = 0, 04788 PciExpressLegacyEndpoint, 04789 PciExpressRootPort = 4, 04790 PciExpressUpstreamSwitchPort, 04791 PciExpressDownstreamSwitchPort, 04792 PciExpressToPciXBridge, 04793 PciXToExpressBridge, 04794 PciExpressRootComplexIntegratedEndpoint, 04795 PciExpressRootComplexEventCollector 04796 } PCI_EXPRESS_DEVICE_TYPE; 04797 04798 typedef enum { 04799 MaxPayload128Bytes = 0, 04800 MaxPayload256Bytes, 04801 MaxPayload512Bytes, 04802 MaxPayload1024Bytes, 04803 MaxPayload2048Bytes, 04804 MaxPayload4096Bytes 04805 } PCI_EXPRESS_MAX_PAYLOAD_SIZE; 04806 04807 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID { 04808 _ANONYMOUS_STRUCT struct { 04809 USHORT FunctionNumber:3; 04810 USHORT DeviceNumber:5; 04811 USHORT BusNumber:8; 04812 } DUMMYSTRUCTNAME; 04813 USHORT AsUSHORT; 04814 } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID; 04815 04816 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE { 04817 ResourceTypeSingle = 0, 04818 ResourceTypeRange, 04819 ResourceTypeExtendedCounterConfiguration, 04820 ResourceTypeOverflow, 04821 ResourceTypeMax 04822 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE; 04823 04824 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR { 04825 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type; 04826 ULONG Flags; 04827 union { 04828 ULONG CounterIndex; 04829 ULONG ExtendedRegisterAddress; 04830 struct { 04831 ULONG Begin; 04832 ULONG End; 04833 } Range; 04834 } u; 04835 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR; 04836 04837 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST { 04838 ULONG Count; 04839 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY]; 04840 } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST; 04841 04842 typedef VOID 04843 (NTAPI *PciPin2Line)( 04844 _In_ struct _BUS_HANDLER *BusHandler, 04845 _In_ struct _BUS_HANDLER *RootHandler, 04846 _In_ PCI_SLOT_NUMBER SlotNumber, 04847 _In_ PPCI_COMMON_CONFIG PciData); 04848 04849 typedef VOID 04850 (NTAPI *PciLine2Pin)( 04851 _In_ struct _BUS_HANDLER *BusHandler, 04852 _In_ struct _BUS_HANDLER *RootHandler, 04853 _In_ PCI_SLOT_NUMBER SlotNumber, 04854 _In_ PPCI_COMMON_CONFIG PciNewData, 04855 _In_ PPCI_COMMON_CONFIG PciOldData); 04856 04857 typedef VOID 04858 (NTAPI *PciReadWriteConfig)( 04859 _In_ struct _BUS_HANDLER *BusHandler, 04860 _In_ PCI_SLOT_NUMBER Slot, 04861 _In_reads_bytes_(Length) PVOID Buffer, 04862 _In_ ULONG Offset, 04863 _In_ ULONG Length); 04864 04865 #define PCI_DATA_TAG ' ICP' 04866 #define PCI_DATA_VERSION 1 04867 04868 typedef struct _PCIBUSDATA { 04869 ULONG Tag; 04870 ULONG Version; 04871 PciReadWriteConfig ReadConfig; 04872 PciReadWriteConfig WriteConfig; 04873 PciPin2Line Pin2Line; 04874 PciLine2Pin Line2Pin; 04875 PCI_SLOT_NUMBER ParentSlot; 04876 PVOID Reserved[4]; 04877 } PCIBUSDATA, *PPCIBUSDATA; 04878 04879 #ifndef _PCIINTRF_X_ 04880 #define _PCIINTRF_X_ 04881 04882 typedef ULONG 04883 (NTAPI *PCI_READ_WRITE_CONFIG)( 04884 _In_ PVOID Context, 04885 _In_ ULONG BusOffset, 04886 _In_ ULONG Slot, 04887 _In_reads_bytes_(Length) PVOID Buffer, 04888 _In_ ULONG Offset, 04889 _In_ ULONG Length); 04890 04891 typedef VOID 04892 (NTAPI *PCI_PIN_TO_LINE)( 04893 _In_ PVOID Context, 04894 _In_ PPCI_COMMON_CONFIG PciData); 04895 04896 typedef VOID 04897 (NTAPI *PCI_LINE_TO_PIN)( 04898 _In_ PVOID Context, 04899 _In_ PPCI_COMMON_CONFIG PciNewData, 04900 _In_ PPCI_COMMON_CONFIG PciOldData); 04901 04902 typedef VOID 04903 (NTAPI *PCI_ROOT_BUS_CAPABILITY)( 04904 _In_ PVOID Context, 04905 _Out_ PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability); 04906 04907 typedef VOID 04908 (NTAPI *PCI_EXPRESS_WAKE_CONTROL)( 04909 _In_ PVOID Context, 04910 _In_ BOOLEAN EnableWake); 04911 04912 typedef struct _PCI_BUS_INTERFACE_STANDARD { 04913 USHORT Size; 04914 USHORT Version; 04915 PVOID Context; 04916 PINTERFACE_REFERENCE InterfaceReference; 04917 PINTERFACE_DEREFERENCE InterfaceDereference; 04918 PCI_READ_WRITE_CONFIG ReadConfig; 04919 PCI_READ_WRITE_CONFIG WriteConfig; 04920 PCI_PIN_TO_LINE PinToLine; 04921 PCI_LINE_TO_PIN LineToPin; 04922 PCI_ROOT_BUS_CAPABILITY RootBusCapability; 04923 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl; 04924 } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD; 04925 04926 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1 04927 04928 #endif /* _PCIINTRF_X_ */ 04929 04930 #if (NTDDI_VERSION >= NTDDI_WIN7) 04931 04932 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000 04933 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000 04934 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \ 04935 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \ 04936 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX) 04937 04938 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200 04939 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300 04940 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300 04941 04942 #else 04943 04944 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200 04945 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300 04946 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300 04947 04948 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 04949 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 04950 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 04951 04952 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 04953 04954 #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \ 04955 FILE_READ_ONLY_DEVICE | \ 04956 FILE_FLOPPY_DISKETTE | \ 04957 FILE_WRITE_ONCE_MEDIA | \ 04958 FILE_DEVICE_SECURE_OPEN) 04959 04960 typedef struct _FILE_ALIGNMENT_INFORMATION { 04961 ULONG AlignmentRequirement; 04962 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; 04963 04964 typedef struct _FILE_NAME_INFORMATION { 04965 ULONG FileNameLength; 04966 WCHAR FileName[1]; 04967 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 04968 04969 04970 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { 04971 ULONG FileAttributes; 04972 ULONG ReparseTag; 04973 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; 04974 04975 typedef struct _FILE_DISPOSITION_INFORMATION { 04976 BOOLEAN DeleteFile; 04977 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 04978 04979 typedef struct _FILE_END_OF_FILE_INFORMATION { 04980 LARGE_INTEGER EndOfFile; 04981 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 04982 04983 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { 04984 LARGE_INTEGER ValidDataLength; 04985 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; 04986 04987 typedef struct _FILE_FS_LABEL_INFORMATION { 04988 ULONG VolumeLabelLength; 04989 WCHAR VolumeLabel[1]; 04990 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; 04991 04992 typedef struct _FILE_FS_VOLUME_INFORMATION { 04993 LARGE_INTEGER VolumeCreationTime; 04994 ULONG VolumeSerialNumber; 04995 ULONG VolumeLabelLength; 04996 BOOLEAN SupportsObjects; 04997 WCHAR VolumeLabel[1]; 04998 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; 04999 05000 typedef struct _FILE_FS_SIZE_INFORMATION { 05001 LARGE_INTEGER TotalAllocationUnits; 05002 LARGE_INTEGER AvailableAllocationUnits; 05003 ULONG SectorsPerAllocationUnit; 05004 ULONG BytesPerSector; 05005 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; 05006 05007 typedef struct _FILE_FS_FULL_SIZE_INFORMATION { 05008 LARGE_INTEGER TotalAllocationUnits; 05009 LARGE_INTEGER CallerAvailableAllocationUnits; 05010 LARGE_INTEGER ActualAvailableAllocationUnits; 05011 ULONG SectorsPerAllocationUnit; 05012 ULONG BytesPerSector; 05013 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; 05014 05015 typedef struct _FILE_FS_OBJECTID_INFORMATION { 05016 UCHAR ObjectId[16]; 05017 UCHAR ExtendedInfo[48]; 05018 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; 05019 05020 typedef union _FILE_SEGMENT_ELEMENT { 05021 PVOID64 Buffer; 05022 ULONGLONG Alignment; 05023 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; 05024 05025 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05026 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05027 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05028 05029 typedef enum _BUS_DATA_TYPE { 05030 ConfigurationSpaceUndefined = -1, 05031 Cmos, 05032 EisaConfiguration, 05033 Pos, 05034 CbusConfiguration, 05035 PCIConfiguration, 05036 VMEConfiguration, 05037 NuBusConfiguration, 05038 PCMCIAConfiguration, 05039 MPIConfiguration, 05040 MPSAConfiguration, 05041 PNPISAConfiguration, 05042 SgiInternalConfiguration, 05043 MaximumBusDataType 05044 } BUS_DATA_TYPE, *PBUS_DATA_TYPE; 05045 05046 /* Some Server 2003 DDK definitions */ 05047 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1 05048 05049 typedef NTSTATUS 05050 (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)( 05051 IN PVOID Context, 05052 IN INTERFACE_TYPE LegacyBusType, 05053 IN ULONG BusNumber, 05054 IN ULONG SlotNumber, 05055 OUT PDEVICE_OBJECT *PhysicalDeviceObject); 05056 05057 typedef struct _ROUTING_TOKEN { 05058 PVOID LinkNode; 05059 ULONG StaticVector; 05060 UCHAR Flags; 05061 } ROUTING_TOKEN, *PROUTING_TOKEN; 05062 05063 typedef NTSTATUS 05064 (NTAPI *PGET_INTERRUPT_ROUTING)( 05065 IN PDEVICE_OBJECT Pdo, 05066 OUT ULONG *Bus, 05067 OUT ULONG *PciSlot, 05068 OUT UCHAR *InterruptLine, 05069 OUT UCHAR *InterruptPin, 05070 OUT UCHAR *ClassCode, 05071 OUT UCHAR *SubClassCode, 05072 OUT PDEVICE_OBJECT *ParentPdo, 05073 OUT ROUTING_TOKEN *RoutingToken, 05074 OUT UCHAR *Flags); 05075 05076 typedef NTSTATUS 05077 (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)( 05078 IN PDEVICE_OBJECT Pdo, 05079 IN PROUTING_TOKEN RoutingToken); 05080 05081 typedef VOID 05082 (NTAPI *PUPDATE_INTERRUPT_LINE)( 05083 IN PDEVICE_OBJECT Pdo, 05084 IN UCHAR LineRegister); 05085 05086 typedef struct _INT_ROUTE_INTERFACE_STANDARD { 05087 USHORT Size; 05088 USHORT Version; 05089 PVOID Context; 05090 PINTERFACE_REFERENCE InterfaceReference; 05091 PINTERFACE_DEREFERENCE InterfaceDereference; 05092 PGET_INTERRUPT_ROUTING GetInterruptRouting; 05093 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken; 05094 PUPDATE_INTERRUPT_LINE UpdateInterruptLine; 05095 } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD; 05096 05097 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE { 05098 USHORT Size; 05099 USHORT Version; 05100 PVOID Context; 05101 PINTERFACE_REFERENCE InterfaceReference; 05102 PINTERFACE_DEREFERENCE InterfaceDereference; 05103 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection; 05104 } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE; 05105 05106 /* FIXME : These definitions don't exist in public headers */ 05107 05108 #define PCI_CB_INTRF_VERSION 1 05109 #define PCI_PME_INTRF_STANDARD_VER 1 05110 #define PNP_LOCATION_INTERFACE_VERSION 1 05111 05112 DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85); 05113 DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b); 05114 05115 typedef NTSTATUS 05116 (NTAPI *PCARDBUSADD)( 05117 IN PDEVICE_OBJECT DeviceObject, 05118 IN OUT PVOID *DeviceContext); 05119 05120 typedef NTSTATUS 05121 (NTAPI *PCARDBUSDELETE)( 05122 IN PVOID DeviceContext); 05123 05124 typedef NTSTATUS 05125 (NTAPI *PCARDBUSPCIDISPATCH)( 05126 IN PVOID DeviceContext, 05127 IN PIRP Irp); 05128 05129 typedef VOID 05130 (NTAPI *PPME_SET_PME_ENABLE)( 05131 IN PDEVICE_OBJECT Pdo, 05132 IN BOOLEAN PmeEnable); 05133 05134 typedef VOID 05135 (NTAPI *PPME_CLEAR_PME_STATUS)( 05136 IN PDEVICE_OBJECT Pdo); 05137 05138 typedef VOID 05139 (NTAPI *PPME_GET_INFORMATION)( 05140 IN PDEVICE_OBJECT Pdo, 05141 OUT PBOOLEAN PmeCapable, 05142 OUT PBOOLEAN PmeStatus, 05143 OUT PBOOLEAN PmeEnable); 05144 05145 typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE { 05146 USHORT Size; 05147 USHORT Version; 05148 PVOID Context; 05149 PINTERFACE_REFERENCE InterfaceReference; 05150 PINTERFACE_DEREFERENCE InterfaceDereference; 05151 PDRIVER_OBJECT DriverObject; 05152 PCARDBUSADD AddCardBus; 05153 PCARDBUSDELETE DeleteCardBus; 05154 PCARDBUSPCIDISPATCH DispatchPnp; 05155 } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE; 05156 05157 typedef struct _PCI_PME_INTERFACE { 05158 USHORT Size; 05159 USHORT Version; 05160 PVOID Context; 05161 PINTERFACE_REFERENCE InterfaceReference; 05162 PINTERFACE_DEREFERENCE InterfaceDereference; 05163 PPME_GET_INFORMATION GetPmeInformation; 05164 PPME_CLEAR_PME_STATUS ClearPmeStatus; 05165 PPME_SET_PME_ENABLE UpdateEnable; 05166 } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE; 05167 05168 $endif (_NTDDK_) 05169 $if (_NTIFS_) 05170 05171 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007 05172 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008 05173 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009 05174 05175 /* also in winnt.h */ 05176 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 05177 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 05178 #define FILE_NOTIFY_CHANGE_NAME 0x00000003 05179 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 05180 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008 05181 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 05182 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 05183 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040 05184 #define FILE_NOTIFY_CHANGE_EA 0x00000080 05185 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 05186 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 05187 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 05188 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 05189 #define FILE_NOTIFY_VALID_MASK 0x00000fff 05190 05191 #define FILE_ACTION_ADDED 0x00000001 05192 #define FILE_ACTION_REMOVED 0x00000002 05193 #define FILE_ACTION_MODIFIED 0x00000003 05194 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 05195 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 05196 #define FILE_ACTION_ADDED_STREAM 0x00000006 05197 #define FILE_ACTION_REMOVED_STREAM 0x00000007 05198 #define FILE_ACTION_MODIFIED_STREAM 0x00000008 05199 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 05200 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A 05201 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B 05202 /* end winnt.h */ 05203 05204 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 05205 #define FILE_PIPE_MESSAGE_TYPE 0x00000001 05206 05207 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000 05208 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002 05209 05210 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000 05211 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002 05212 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003 05213 05214 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 05215 #define FILE_PIPE_MESSAGE_MODE 0x00000001 05216 05217 #define FILE_PIPE_QUEUE_OPERATION 0x00000000 05218 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001 05219 05220 #define FILE_PIPE_INBOUND 0x00000000 05221 #define FILE_PIPE_OUTBOUND 0x00000001 05222 #define FILE_PIPE_FULL_DUPLEX 0x00000002 05223 05224 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001 05225 #define FILE_PIPE_LISTENING_STATE 0x00000002 05226 #define FILE_PIPE_CONNECTED_STATE 0x00000003 05227 #define FILE_PIPE_CLOSING_STATE 0x00000004 05228 05229 #define FILE_PIPE_CLIENT_END 0x00000000 05230 #define FILE_PIPE_SERVER_END 0x00000001 05231 05232 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 05233 #define FILE_CASE_PRESERVED_NAMES 0x00000002 05234 #define FILE_UNICODE_ON_DISK 0x00000004 05235 #define FILE_PERSISTENT_ACLS 0x00000008 05236 #define FILE_FILE_COMPRESSION 0x00000010 05237 #define FILE_VOLUME_QUOTAS 0x00000020 05238 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040 05239 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 05240 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 05241 #define FILE_VOLUME_IS_COMPRESSED 0x00008000 05242 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000 05243 #define FILE_SUPPORTS_ENCRYPTION 0x00020000 05244 #define FILE_NAMED_STREAMS 0x00040000 05245 #define FILE_READ_ONLY_VOLUME 0x00080000 05246 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 05247 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000 05248 #define FILE_SUPPORTS_HARD_LINKS 0x00400000 05249 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 05250 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 05251 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000 05252 05253 #define FILE_NEED_EA 0x00000080 05254 05255 #define FILE_EA_TYPE_BINARY 0xfffe 05256 #define FILE_EA_TYPE_ASCII 0xfffd 05257 #define FILE_EA_TYPE_BITMAP 0xfffb 05258 #define FILE_EA_TYPE_METAFILE 0xfffa 05259 #define FILE_EA_TYPE_ICON 0xfff9 05260 #define FILE_EA_TYPE_EA 0xffee 05261 #define FILE_EA_TYPE_MVMT 0xffdf 05262 #define FILE_EA_TYPE_MVST 0xffde 05263 #define FILE_EA_TYPE_ASN1 0xffdd 05264 #define FILE_EA_TYPE_FAMILY_IDS 0xff01 05265 05266 typedef struct _FILE_NOTIFY_INFORMATION { 05267 ULONG NextEntryOffset; 05268 ULONG Action; 05269 ULONG FileNameLength; 05270 WCHAR FileName[1]; 05271 } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; 05272 05273 typedef struct _FILE_DIRECTORY_INFORMATION { 05274 ULONG NextEntryOffset; 05275 ULONG FileIndex; 05276 LARGE_INTEGER CreationTime; 05277 LARGE_INTEGER LastAccessTime; 05278 LARGE_INTEGER LastWriteTime; 05279 LARGE_INTEGER ChangeTime; 05280 LARGE_INTEGER EndOfFile; 05281 LARGE_INTEGER AllocationSize; 05282 ULONG FileAttributes; 05283 ULONG FileNameLength; 05284 WCHAR FileName[1]; 05285 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; 05286 05287 typedef struct _FILE_FULL_DIR_INFORMATION { 05288 ULONG NextEntryOffset; 05289 ULONG FileIndex; 05290 LARGE_INTEGER CreationTime; 05291 LARGE_INTEGER LastAccessTime; 05292 LARGE_INTEGER LastWriteTime; 05293 LARGE_INTEGER ChangeTime; 05294 LARGE_INTEGER EndOfFile; 05295 LARGE_INTEGER AllocationSize; 05296 ULONG FileAttributes; 05297 ULONG FileNameLength; 05298 ULONG EaSize; 05299 WCHAR FileName[1]; 05300 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; 05301 05302 typedef struct _FILE_ID_FULL_DIR_INFORMATION { 05303 ULONG NextEntryOffset; 05304 ULONG FileIndex; 05305 LARGE_INTEGER CreationTime; 05306 LARGE_INTEGER LastAccessTime; 05307 LARGE_INTEGER LastWriteTime; 05308 LARGE_INTEGER ChangeTime; 05309 LARGE_INTEGER EndOfFile; 05310 LARGE_INTEGER AllocationSize; 05311 ULONG FileAttributes; 05312 ULONG FileNameLength; 05313 ULONG EaSize; 05314 LARGE_INTEGER FileId; 05315 WCHAR FileName[1]; 05316 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; 05317 05318 typedef struct _FILE_BOTH_DIR_INFORMATION { 05319 ULONG NextEntryOffset; 05320 ULONG FileIndex; 05321 LARGE_INTEGER CreationTime; 05322 LARGE_INTEGER LastAccessTime; 05323 LARGE_INTEGER LastWriteTime; 05324 LARGE_INTEGER ChangeTime; 05325 LARGE_INTEGER EndOfFile; 05326 LARGE_INTEGER AllocationSize; 05327 ULONG FileAttributes; 05328 ULONG FileNameLength; 05329 ULONG EaSize; 05330 CCHAR ShortNameLength; 05331 WCHAR ShortName[12]; 05332 WCHAR FileName[1]; 05333 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; 05334 05335 typedef struct _FILE_ID_BOTH_DIR_INFORMATION { 05336 ULONG NextEntryOffset; 05337 ULONG FileIndex; 05338 LARGE_INTEGER CreationTime; 05339 LARGE_INTEGER LastAccessTime; 05340 LARGE_INTEGER LastWriteTime; 05341 LARGE_INTEGER ChangeTime; 05342 LARGE_INTEGER EndOfFile; 05343 LARGE_INTEGER AllocationSize; 05344 ULONG FileAttributes; 05345 ULONG FileNameLength; 05346 ULONG EaSize; 05347 CCHAR ShortNameLength; 05348 WCHAR ShortName[12]; 05349 LARGE_INTEGER FileId; 05350 WCHAR FileName[1]; 05351 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; 05352 05353 typedef struct _FILE_NAMES_INFORMATION { 05354 ULONG NextEntryOffset; 05355 ULONG FileIndex; 05356 ULONG FileNameLength; 05357 WCHAR FileName[1]; 05358 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; 05359 05360 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION { 05361 ULONG NextEntryOffset; 05362 ULONG FileIndex; 05363 LARGE_INTEGER CreationTime; 05364 LARGE_INTEGER LastAccessTime; 05365 LARGE_INTEGER LastWriteTime; 05366 LARGE_INTEGER ChangeTime; 05367 LARGE_INTEGER EndOfFile; 05368 LARGE_INTEGER AllocationSize; 05369 ULONG FileAttributes; 05370 ULONG FileNameLength; 05371 LARGE_INTEGER FileId; 05372 GUID LockingTransactionId; 05373 ULONG TxInfoFlags; 05374 WCHAR FileName[1]; 05375 } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION; 05376 05377 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001 05378 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002 05379 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004 05380 05381 typedef struct _FILE_OBJECTID_INFORMATION { 05382 LONGLONG FileReference; 05383 UCHAR ObjectId[16]; 05384 _ANONYMOUS_UNION union { 05385 _ANONYMOUS_STRUCT struct { 05386 UCHAR BirthVolumeId[16]; 05387 UCHAR BirthObjectId[16]; 05388 UCHAR DomainId[16]; 05389 } DUMMYSTRUCTNAME; 05390 UCHAR ExtendedInfo[48]; 05391 } DUMMYUNIONNAME; 05392 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; 05393 05394 #define ANSI_DOS_STAR ('<') 05395 #define ANSI_DOS_QM ('>') 05396 #define ANSI_DOS_DOT ('"') 05397 05398 #define DOS_STAR (L'<') 05399 #define DOS_QM (L'>') 05400 #define DOS_DOT (L'"') 05401 05402 typedef struct _FILE_INTERNAL_INFORMATION { 05403 LARGE_INTEGER IndexNumber; 05404 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; 05405 05406 typedef struct _FILE_EA_INFORMATION { 05407 ULONG EaSize; 05408 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; 05409 05410 typedef struct _FILE_ACCESS_INFORMATION { 05411 ACCESS_MASK AccessFlags; 05412 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; 05413 05414 typedef struct _FILE_MODE_INFORMATION { 05415 ULONG Mode; 05416 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; 05417 05418 typedef struct _FILE_ALL_INFORMATION { 05419 FILE_BASIC_INFORMATION BasicInformation; 05420 FILE_STANDARD_INFORMATION StandardInformation; 05421 FILE_INTERNAL_INFORMATION InternalInformation; 05422 FILE_EA_INFORMATION EaInformation; 05423 FILE_ACCESS_INFORMATION AccessInformation; 05424 FILE_POSITION_INFORMATION PositionInformation; 05425 FILE_MODE_INFORMATION ModeInformation; 05426 FILE_ALIGNMENT_INFORMATION AlignmentInformation; 05427 FILE_NAME_INFORMATION NameInformation; 05428 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; 05429 05430 typedef struct _FILE_ALLOCATION_INFORMATION { 05431 LARGE_INTEGER AllocationSize; 05432 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; 05433 05434 typedef struct _FILE_COMPRESSION_INFORMATION { 05435 LARGE_INTEGER CompressedFileSize; 05436 USHORT CompressionFormat; 05437 UCHAR CompressionUnitShift; 05438 UCHAR ChunkShift; 05439 UCHAR ClusterShift; 05440 UCHAR Reserved[3]; 05441 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; 05442 05443 typedef struct _FILE_LINK_INFORMATION { 05444 BOOLEAN ReplaceIfExists; 05445 HANDLE RootDirectory; 05446 ULONG FileNameLength; 05447 WCHAR FileName[1]; 05448 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; 05449 05450 typedef struct _FILE_MOVE_CLUSTER_INFORMATION { 05451 ULONG ClusterCount; 05452 HANDLE RootDirectory; 05453 ULONG FileNameLength; 05454 WCHAR FileName[1]; 05455 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION; 05456 05457 typedef struct _FILE_RENAME_INFORMATION { 05458 BOOLEAN ReplaceIfExists; 05459 HANDLE RootDirectory; 05460 ULONG FileNameLength; 05461 WCHAR FileName[1]; 05462 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; 05463 05464 typedef struct _FILE_STREAM_INFORMATION { 05465 ULONG NextEntryOffset; 05466 ULONG StreamNameLength; 05467 LARGE_INTEGER StreamSize; 05468 LARGE_INTEGER StreamAllocationSize; 05469 WCHAR StreamName[1]; 05470 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; 05471 05472 typedef struct _FILE_TRACKING_INFORMATION { 05473 HANDLE DestinationFile; 05474 ULONG ObjectInformationLength; 05475 CHAR ObjectInformation[1]; 05476 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; 05477 05478 typedef struct _FILE_COMPLETION_INFORMATION { 05479 HANDLE Port; 05480 PVOID Key; 05481 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; 05482 05483 typedef struct _FILE_PIPE_INFORMATION { 05484 ULONG ReadMode; 05485 ULONG CompletionMode; 05486 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; 05487 05488 typedef struct _FILE_PIPE_LOCAL_INFORMATION { 05489 ULONG NamedPipeType; 05490 ULONG NamedPipeConfiguration; 05491 ULONG MaximumInstances; 05492 ULONG CurrentInstances; 05493 ULONG InboundQuota; 05494 ULONG ReadDataAvailable; 05495 ULONG OutboundQuota; 05496 ULONG WriteQuotaAvailable; 05497 ULONG NamedPipeState; 05498 ULONG NamedPipeEnd; 05499 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; 05500 05501 typedef struct _FILE_PIPE_REMOTE_INFORMATION { 05502 LARGE_INTEGER CollectDataTime; 05503 ULONG MaximumCollectionCount; 05504 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; 05505 05506 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { 05507 ULONG MaximumMessageSize; 05508 ULONG MailslotQuota; 05509 ULONG NextMessageSize; 05510 ULONG MessagesAvailable; 05511 LARGE_INTEGER ReadTimeout; 05512 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; 05513 05514 typedef struct _FILE_MAILSLOT_SET_INFORMATION { 05515 PLARGE_INTEGER ReadTimeout; 05516 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; 05517 05518 typedef struct _FILE_REPARSE_POINT_INFORMATION { 05519 LONGLONG FileReference; 05520 ULONG Tag; 05521 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION; 05522 05523 typedef struct _FILE_LINK_ENTRY_INFORMATION { 05524 ULONG NextEntryOffset; 05525 LONGLONG ParentFileId; 05526 ULONG FileNameLength; 05527 WCHAR FileName[1]; 05528 } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION; 05529 05530 typedef struct _FILE_LINKS_INFORMATION { 05531 ULONG BytesNeeded; 05532 ULONG EntriesReturned; 05533 FILE_LINK_ENTRY_INFORMATION Entry; 05534 } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION; 05535 05536 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION { 05537 ULONG FileNameLength; 05538 WCHAR FileName[1]; 05539 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION; 05540 05541 typedef struct _FILE_STANDARD_LINK_INFORMATION { 05542 ULONG NumberOfAccessibleLinks; 05543 ULONG TotalNumberOfLinks; 05544 BOOLEAN DeletePending; 05545 BOOLEAN Directory; 05546 } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION; 05547 05548 typedef struct _FILE_GET_EA_INFORMATION { 05549 ULONG NextEntryOffset; 05550 UCHAR EaNameLength; 05551 CHAR EaName[1]; 05552 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; 05553 05554 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001 05555 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002 05556 05557 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION { 05558 USHORT StructureVersion; 05559 USHORT StructureSize; 05560 ULONG Protocol; 05561 USHORT ProtocolMajorVersion; 05562 USHORT ProtocolMinorVersion; 05563 USHORT ProtocolRevision; 05564 USHORT Reserved; 05565 ULONG Flags; 05566 struct { 05567 ULONG Reserved[8]; 05568 } GenericReserved; 05569 struct { 05570 ULONG Reserved[16]; 05571 } ProtocolSpecificReserved; 05572 } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION; 05573 05574 typedef struct _FILE_GET_QUOTA_INFORMATION { 05575 ULONG NextEntryOffset; 05576 ULONG SidLength; 05577 SID Sid; 05578 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION; 05579 05580 typedef struct _FILE_QUOTA_INFORMATION { 05581 ULONG NextEntryOffset; 05582 ULONG SidLength; 05583 LARGE_INTEGER ChangeTime; 05584 LARGE_INTEGER QuotaUsed; 05585 LARGE_INTEGER QuotaThreshold; 05586 LARGE_INTEGER QuotaLimit; 05587 SID Sid; 05588 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; 05589 05590 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { 05591 ULONG FileSystemAttributes; 05592 ULONG MaximumComponentNameLength; 05593 ULONG FileSystemNameLength; 05594 WCHAR FileSystemName[1]; 05595 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; 05596 05597 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION { 05598 BOOLEAN DriverInPath; 05599 ULONG DriverNameLength; 05600 WCHAR DriverName[1]; 05601 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION; 05602 05603 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION { 05604 ULONG Flags; 05605 } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION; 05606 05607 #define FILE_VC_QUOTA_NONE 0x00000000 05608 #define FILE_VC_QUOTA_TRACK 0x00000001 05609 #define FILE_VC_QUOTA_ENFORCE 0x00000002 05610 #define FILE_VC_QUOTA_MASK 0x00000003 05611 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008 05612 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010 05613 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020 05614 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040 05615 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080 05616 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100 05617 #define FILE_VC_QUOTAS_REBUILDING 0x00000200 05618 #define FILE_VC_VALID_MASK 0x000003ff 05619 05620 typedef struct _FILE_FS_CONTROL_INFORMATION { 05621 LARGE_INTEGER FreeSpaceStartFiltering; 05622 LARGE_INTEGER FreeSpaceThreshold; 05623 LARGE_INTEGER FreeSpaceStopFiltering; 05624 LARGE_INTEGER DefaultQuotaThreshold; 05625 LARGE_INTEGER DefaultQuotaLimit; 05626 ULONG FileSystemControlFlags; 05627 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; 05628 05629 #ifndef _FILESYSTEMFSCTL_ 05630 #define _FILESYSTEMFSCTL_ 05631 05632 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) 05633 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) 05634 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) 05635 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) 05636 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) 05637 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) 05638 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) 05639 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) 05640 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) 05641 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) 05642 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) 05643 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) 05644 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS) 05645 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) 05646 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 05647 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS) 05648 05649 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS) 05650 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) 05651 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) 05652 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS) 05653 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) 05654 05655 #if (_WIN32_WINNT >= 0x0400) 05656 05657 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) 05658 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) 05659 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) 05660 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) 05661 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS) 05662 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) 05663 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS) 05664 05665 #endif 05666 05667 #if (_WIN32_WINNT >= 0x0500) 05668 05669 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS) 05670 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA) 05671 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) 05672 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA) 05673 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA) 05674 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) 05675 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA) 05676 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA) 05677 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) 05678 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA) 05679 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA) 05680 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) 05681 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA) 05682 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) 05683 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) 05684 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA) 05685 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS) 05686 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS) 05687 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS) 05688 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS) 05689 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA) 05690 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA) 05691 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA) 05692 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS) 05693 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS) 05694 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS) 05695 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) 05696 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) 05697 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 05698 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS) 05699 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA) 05700 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05701 05702 #endif 05703 05704 #if (_WIN32_WINNT >= 0x0600) 05705 05706 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) 05707 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) 05708 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) 05709 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) 05710 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05711 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA) 05712 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA) 05713 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA) 05714 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA) 05715 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA) 05716 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) 05717 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA) 05718 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA) 05719 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA) 05720 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA) 05721 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA) 05722 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA) 05723 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) 05724 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA) 05725 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05726 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) 05727 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) 05728 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) 05729 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) 05730 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) 05731 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 05732 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) 05733 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) 05734 05735 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \ 05736 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) 05737 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) 05738 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) 05739 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) 05740 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) 05741 05742 #endif 05743 05744 #if (_WIN32_WINNT >= 0x0601) 05745 05746 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS) 05747 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS) 05748 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS) 05749 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS) 05750 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS) 05751 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS) 05752 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS) 05753 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) 05754 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) 05755 05756 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS) 05757 05758 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) 05759 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) 05760 05761 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS) 05762 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS) 05763 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) 05764 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) 05765 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) 05766 05767 typedef struct _CSV_NAMESPACE_INFO { 05768 ULONG Version; 05769 ULONG DeviceNumber; 05770 LARGE_INTEGER StartingOffset; 05771 ULONG SectorSize; 05772 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO; 05773 05774 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO)) 05775 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF 05776 05777 #endif 05778 05779 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED 05780 05781 typedef struct _PATHNAME_BUFFER { 05782 ULONG PathNameLength; 05783 WCHAR Name[1]; 05784 } PATHNAME_BUFFER, *PPATHNAME_BUFFER; 05785 05786 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { 05787 UCHAR First0x24BytesOfBootSector[0x24]; 05788 } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER; 05789 05790 #if (_WIN32_WINNT >= 0x0400) 05791 05792 typedef struct _NTFS_VOLUME_DATA_BUFFER { 05793 LARGE_INTEGER VolumeSerialNumber; 05794 LARGE_INTEGER NumberSectors; 05795 LARGE_INTEGER TotalClusters; 05796 LARGE_INTEGER FreeClusters; 05797 LARGE_INTEGER TotalReserved; 05798 ULONG BytesPerSector; 05799 ULONG BytesPerCluster; 05800 ULONG BytesPerFileRecordSegment; 05801 ULONG ClustersPerFileRecordSegment; 05802 LARGE_INTEGER MftValidDataLength; 05803 LARGE_INTEGER MftStartLcn; 05804 LARGE_INTEGER Mft2StartLcn; 05805 LARGE_INTEGER MftZoneStart; 05806 LARGE_INTEGER MftZoneEnd; 05807 } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER; 05808 05809 typedef struct _NTFS_EXTENDED_VOLUME_DATA { 05810 ULONG ByteCount; 05811 USHORT MajorVersion; 05812 USHORT MinorVersion; 05813 } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA; 05814 05815 typedef struct _STARTING_LCN_INPUT_BUFFER { 05816 LARGE_INTEGER StartingLcn; 05817 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER; 05818 05819 typedef struct _VOLUME_BITMAP_BUFFER { 05820 LARGE_INTEGER StartingLcn; 05821 LARGE_INTEGER BitmapSize; 05822 UCHAR Buffer[1]; 05823 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER; 05824 05825 typedef struct _STARTING_VCN_INPUT_BUFFER { 05826 LARGE_INTEGER StartingVcn; 05827 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER; 05828 05829 typedef struct _RETRIEVAL_POINTERS_BUFFER { 05830 ULONG ExtentCount; 05831 LARGE_INTEGER StartingVcn; 05832 struct { 05833 LARGE_INTEGER NextVcn; 05834 LARGE_INTEGER Lcn; 05835 } Extents[1]; 05836 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER; 05837 05838 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER { 05839 LARGE_INTEGER FileReferenceNumber; 05840 } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER; 05841 05842 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER { 05843 LARGE_INTEGER FileReferenceNumber; 05844 ULONG FileRecordLength; 05845 UCHAR FileRecordBuffer[1]; 05846 } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER; 05847 05848 typedef struct _MOVE_FILE_DATA { 05849 HANDLE FileHandle; 05850 LARGE_INTEGER StartingVcn; 05851 LARGE_INTEGER StartingLcn; 05852 ULONG ClusterCount; 05853 } MOVE_FILE_DATA, *PMOVE_FILE_DATA; 05854 05855 typedef struct _MOVE_FILE_RECORD_DATA { 05856 HANDLE FileHandle; 05857 LARGE_INTEGER SourceFileRecord; 05858 LARGE_INTEGER TargetFileRecord; 05859 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA; 05860 05861 #if defined(_WIN64) 05862 typedef struct _MOVE_FILE_DATA32 { 05863 UINT32 FileHandle; 05864 LARGE_INTEGER StartingVcn; 05865 LARGE_INTEGER StartingLcn; 05866 ULONG ClusterCount; 05867 } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32; 05868 #endif 05869 05870 #endif /* (_WIN32_WINNT >= 0x0400) */ 05871 05872 #if (_WIN32_WINNT >= 0x0500) 05873 05874 typedef struct _FIND_BY_SID_DATA { 05875 ULONG Restart; 05876 SID Sid; 05877 } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA; 05878 05879 typedef struct _FIND_BY_SID_OUTPUT { 05880 ULONG NextEntryOffset; 05881 ULONG FileIndex; 05882 ULONG FileNameLength; 05883 WCHAR FileName[1]; 05884 } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT; 05885 05886 typedef struct _MFT_ENUM_DATA { 05887 ULONGLONG StartFileReferenceNumber; 05888 USN LowUsn; 05889 USN HighUsn; 05890 } MFT_ENUM_DATA, *PMFT_ENUM_DATA; 05891 05892 typedef struct _CREATE_USN_JOURNAL_DATA { 05893 ULONGLONG MaximumSize; 05894 ULONGLONG AllocationDelta; 05895 } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA; 05896 05897 typedef struct _READ_USN_JOURNAL_DATA { 05898 USN StartUsn; 05899 ULONG ReasonMask; 05900 ULONG ReturnOnlyOnClose; 05901 ULONGLONG Timeout; 05902 ULONGLONG BytesToWaitFor; 05903 ULONGLONG UsnJournalID; 05904 } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA; 05905 05906 typedef struct _USN_RECORD { 05907 ULONG RecordLength; 05908 USHORT MajorVersion; 05909 USHORT MinorVersion; 05910 ULONGLONG FileReferenceNumber; 05911 ULONGLONG ParentFileReferenceNumber; 05912 USN Usn; 05913 LARGE_INTEGER TimeStamp; 05914 ULONG Reason; 05915 ULONG SourceInfo; 05916 ULONG SecurityId; 05917 ULONG FileAttributes; 05918 USHORT FileNameLength; 05919 USHORT FileNameOffset; 05920 WCHAR FileName[1]; 05921 } USN_RECORD, *PUSN_RECORD; 05922 05923 #define USN_PAGE_SIZE (0x1000) 05924 05925 #define USN_REASON_DATA_OVERWRITE (0x00000001) 05926 #define USN_REASON_DATA_EXTEND (0x00000002) 05927 #define USN_REASON_DATA_TRUNCATION (0x00000004) 05928 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) 05929 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020) 05930 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) 05931 #define USN_REASON_FILE_CREATE (0x00000100) 05932 #define USN_REASON_FILE_DELETE (0x00000200) 05933 #define USN_REASON_EA_CHANGE (0x00000400) 05934 #define USN_REASON_SECURITY_CHANGE (0x00000800) 05935 #define USN_REASON_RENAME_OLD_NAME (0x00001000) 05936 #define USN_REASON_RENAME_NEW_NAME (0x00002000) 05937 #define USN_REASON_INDEXABLE_CHANGE (0x00004000) 05938 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000) 05939 #define USN_REASON_HARD_LINK_CHANGE (0x00010000) 05940 #define USN_REASON_COMPRESSION_CHANGE (0x00020000) 05941 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000) 05942 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000) 05943 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) 05944 #define USN_REASON_STREAM_CHANGE (0x00200000) 05945 #define USN_REASON_TRANSACTED_CHANGE (0x00400000) 05946 #define USN_REASON_CLOSE (0x80000000) 05947 05948 typedef struct _USN_JOURNAL_DATA { 05949 ULONGLONG UsnJournalID; 05950 USN FirstUsn; 05951 USN NextUsn; 05952 USN LowestValidUsn; 05953 USN MaxUsn; 05954 ULONGLONG MaximumSize; 05955 ULONGLONG AllocationDelta; 05956 } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA; 05957 05958 typedef struct _DELETE_USN_JOURNAL_DATA { 05959 ULONGLONG UsnJournalID; 05960 ULONG DeleteFlags; 05961 } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA; 05962 05963 #define USN_DELETE_FLAG_DELETE (0x00000001) 05964 #define USN_DELETE_FLAG_NOTIFY (0x00000002) 05965 #define USN_DELETE_VALID_FLAGS (0x00000003) 05966 05967 typedef struct _MARK_HANDLE_INFO { 05968 ULONG UsnSourceInfo; 05969 HANDLE VolumeHandle; 05970 ULONG HandleInfo; 05971 } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO; 05972 05973 #if defined(_WIN64) 05974 typedef struct _MARK_HANDLE_INFO32 { 05975 ULONG UsnSourceInfo; 05976 UINT32 VolumeHandle; 05977 ULONG HandleInfo; 05978 } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32; 05979 #endif 05980 05981 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001) 05982 #define USN_SOURCE_AUXILIARY_DATA (0x00000002) 05983 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) 05984 05985 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) 05986 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004) 05987 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008) 05988 05989 typedef struct _BULK_SECURITY_TEST_DATA { 05990 ACCESS_MASK DesiredAccess; 05991 ULONG SecurityIds[1]; 05992 } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA; 05993 05994 #define VOLUME_IS_DIRTY (0x00000001) 05995 #define VOLUME_UPGRADE_SCHEDULED (0x00000002) 05996 #define VOLUME_SESSION_OPEN (0x00000004) 05997 05998 typedef struct _FILE_PREFETCH { 05999 ULONG Type; 06000 ULONG Count; 06001 ULONGLONG Prefetch[1]; 06002 } FILE_PREFETCH, *PFILE_PREFETCH; 06003 06004 typedef struct _FILE_PREFETCH_EX { 06005 ULONG Type; 06006 ULONG Count; 06007 PVOID Context; 06008 ULONGLONG Prefetch[1]; 06009 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX; 06010 06011 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 06012 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2 06013 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3 06014 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4 06015 06016 #define FILE_PREFETCH_TYPE_MAX 0x4 06017 06018 typedef struct _FILE_OBJECTID_BUFFER { 06019 UCHAR ObjectId[16]; 06020 _ANONYMOUS_UNION union { 06021 _ANONYMOUS_STRUCT struct { 06022 UCHAR BirthVolumeId[16]; 06023 UCHAR BirthObjectId[16]; 06024 UCHAR DomainId[16]; 06025 } DUMMYSTRUCTNAME; 06026 UCHAR ExtendedInfo[48]; 06027 } DUMMYUNIONNAME; 06028 } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER; 06029 06030 typedef struct _FILE_SET_SPARSE_BUFFER { 06031 BOOLEAN SetSparse; 06032 } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER; 06033 06034 typedef struct _FILE_ZERO_DATA_INFORMATION { 06035 LARGE_INTEGER FileOffset; 06036 LARGE_INTEGER BeyondFinalZero; 06037 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION; 06038 06039 typedef struct _FILE_ALLOCATED_RANGE_BUFFER { 06040 LARGE_INTEGER FileOffset; 06041 LARGE_INTEGER Length; 06042 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER; 06043 06044 typedef struct _ENCRYPTION_BUFFER { 06045 ULONG EncryptionOperation; 06046 UCHAR Private[1]; 06047 } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER; 06048 06049 #define FILE_SET_ENCRYPTION 0x00000001 06050 #define FILE_CLEAR_ENCRYPTION 0x00000002 06051 #define STREAM_SET_ENCRYPTION 0x00000003 06052 #define STREAM_CLEAR_ENCRYPTION 0x00000004 06053 06054 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004 06055 06056 typedef struct _DECRYPTION_STATUS_BUFFER { 06057 BOOLEAN NoEncryptedStreams; 06058 } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER; 06059 06060 #define ENCRYPTION_FORMAT_DEFAULT (0x01) 06061 06062 #define COMPRESSION_FORMAT_SPARSE (0x4000) 06063 06064 typedef struct _REQUEST_RAW_ENCRYPTED_DATA { 06065 LONGLONG FileOffset; 06066 ULONG Length; 06067 } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA; 06068 06069 typedef struct _ENCRYPTED_DATA_INFO { 06070 ULONGLONG StartingFileOffset; 06071 ULONG OutputBufferOffset; 06072 ULONG BytesWithinFileSize; 06073 ULONG BytesWithinValidDataLength; 06074 USHORT CompressionFormat; 06075 UCHAR DataUnitShift; 06076 UCHAR ChunkShift; 06077 UCHAR ClusterShift; 06078 UCHAR EncryptionFormat; 06079 USHORT NumberOfDataBlocks; 06080 ULONG DataBlockSize[ANYSIZE_ARRAY]; 06081 } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO; 06082 06083 typedef struct _PLEX_READ_DATA_REQUEST { 06084 LARGE_INTEGER ByteOffset; 06085 ULONG ByteLength; 06086 ULONG PlexNumber; 06087 } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST; 06088 06089 typedef struct _SI_COPYFILE { 06090 ULONG SourceFileNameLength; 06091 ULONG DestinationFileNameLength; 06092 ULONG Flags; 06093 WCHAR FileNameBuffer[1]; 06094 } SI_COPYFILE, *PSI_COPYFILE; 06095 06096 #define COPYFILE_SIS_LINK 0x0001 06097 #define COPYFILE_SIS_REPLACE 0x0002 06098 #define COPYFILE_SIS_FLAGS 0x0003 06099 06100 #endif /* (_WIN32_WINNT >= 0x0500) */ 06101 06102 #if (_WIN32_WINNT >= 0x0600) 06103 06104 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { 06105 BOOLEAN CloseDisc; 06106 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER; 06107 06108 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { 06109 BOOLEAN Disable; 06110 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER; 06111 06112 typedef struct _FILE_QUERY_SPARING_BUFFER { 06113 ULONG SparingUnitBytes; 06114 BOOLEAN SoftwareSparing; 06115 ULONG TotalSpareBlocks; 06116 ULONG FreeSpareBlocks; 06117 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER; 06118 06119 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { 06120 LARGE_INTEGER DirectoryCount; 06121 LARGE_INTEGER FileCount; 06122 USHORT FsFormatMajVersion; 06123 USHORT FsFormatMinVersion; 06124 WCHAR FsFormatName[12]; 06125 LARGE_INTEGER FormatTime; 06126 LARGE_INTEGER LastUpdateTime; 06127 WCHAR CopyrightInfo[34]; 06128 WCHAR AbstractInfo[34]; 06129 WCHAR FormattingImplementationInfo[34]; 06130 WCHAR LastModifyingImplementationInfo[34]; 06131 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; 06132 06133 #define SET_REPAIR_ENABLED (0x00000001) 06134 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002) 06135 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004) 06136 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008) 06137 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010) 06138 #define SET_REPAIR_VALID_MASK (0x0000001F) 06139 06140 typedef enum _SHRINK_VOLUME_REQUEST_TYPES { 06141 ShrinkPrepare = 1, 06142 ShrinkCommit, 06143 ShrinkAbort 06144 } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES; 06145 06146 typedef struct _SHRINK_VOLUME_INFORMATION { 06147 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; 06148 ULONGLONG Flags; 06149 LONGLONG NewNumberOfSectors; 06150 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION; 06151 06152 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001 06153 #define TXFS_RM_FLAG_RENAME_RM 0x00000002 06154 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004 06155 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008 06156 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010 06157 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020 06158 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040 06159 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080 06160 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100 06161 #define TXFS_RM_FLAG_GROW_LOG 0x00000400 06162 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800 06163 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000 06164 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000 06165 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000 06166 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000 06167 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000 06168 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000 06169 06170 #define TXFS_LOGGING_MODE_SIMPLE (0x0001) 06171 #define TXFS_LOGGING_MODE_FULL (0x0002) 06172 06173 #define TXFS_TRANSACTION_STATE_NONE 0x00 06174 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01 06175 #define TXFS_TRANSACTION_STATE_PREPARED 0x02 06176 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03 06177 06178 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \ 06179 TXFS_RM_FLAG_RENAME_RM | \ 06180 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 06181 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 06182 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 06183 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 06184 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 06185 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 06186 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 06187 TXFS_RM_FLAG_SHRINK_LOG | \ 06188 TXFS_RM_FLAG_GROW_LOG | \ 06189 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \ 06190 TXFS_RM_FLAG_PRESERVE_CHANGES | \ 06191 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 06192 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 06193 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 06194 TXFS_RM_FLAG_PREFER_AVAILABILITY) 06195 06196 typedef struct _TXFS_MODIFY_RM { 06197 ULONG Flags; 06198 ULONG LogContainerCountMax; 06199 ULONG LogContainerCountMin; 06200 ULONG LogContainerCount; 06201 ULONG LogGrowthIncrement; 06202 ULONG LogAutoShrinkPercentage; 06203 ULONGLONG Reserved; 06204 USHORT LoggingMode; 06205 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM; 06206 06207 #define TXFS_RM_STATE_NOT_STARTED 0 06208 #define TXFS_RM_STATE_STARTING 1 06209 #define TXFS_RM_STATE_ACTIVE 2 06210 #define TXFS_RM_STATE_SHUTTING_DOWN 3 06211 06212 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \ 06213 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 06214 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 06215 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 06216 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 06217 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 06218 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 06219 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 06220 TXFS_RM_FLAG_PREFER_AVAILABILITY) 06221 06222 typedef struct _TXFS_QUERY_RM_INFORMATION { 06223 ULONG BytesRequired; 06224 ULONGLONG TailLsn; 06225 ULONGLONG CurrentLsn; 06226 ULONGLONG ArchiveTailLsn; 06227 ULONGLONG LogContainerSize; 06228 LARGE_INTEGER HighestVirtualClock; 06229 ULONG LogContainerCount; 06230 ULONG LogContainerCountMax; 06231 ULONG LogContainerCountMin; 06232 ULONG LogGrowthIncrement; 06233 ULONG LogAutoShrinkPercentage; 06234 ULONG Flags; 06235 USHORT LoggingMode; 06236 USHORT Reserved; 06237 ULONG RmState; 06238 ULONGLONG LogCapacity; 06239 ULONGLONG LogFree; 06240 ULONGLONG TopsSize; 06241 ULONGLONG TopsUsed; 06242 ULONGLONG TransactionCount; 06243 ULONGLONG OnePCCount; 06244 ULONGLONG TwoPCCount; 06245 ULONGLONG NumberLogFileFull; 06246 ULONGLONG OldestTransactionAge; 06247 GUID RMName; 06248 ULONG TmLogPathOffset; 06249 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION; 06250 06251 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01 06252 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02 06253 06254 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \ 06255 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \ 06256 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) 06257 06258 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { 06259 LARGE_INTEGER LastVirtualClock; 06260 ULONGLONG LastRedoLsn; 06261 ULONGLONG HighestRecoveryLsn; 06262 ULONG Flags; 06263 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION; 06264 06265 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001 06266 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002 06267 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004 06268 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008 06269 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010 06270 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020 06271 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040 06272 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080 06273 06274 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200 06275 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400 06276 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800 06277 06278 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000 06279 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000 06280 06281 #define TXFS_START_RM_VALID_FLAGS \ 06282 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 06283 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 06284 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \ 06285 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 06286 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 06287 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 06288 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \ 06289 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 06290 TXFS_START_RM_FLAG_LOGGING_MODE | \ 06291 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \ 06292 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \ 06293 TXFS_START_RM_FLAG_PREFER_AVAILABILITY) 06294 06295 typedef struct _TXFS_START_RM_INFORMATION { 06296 ULONG Flags; 06297 ULONGLONG LogContainerSize; 06298 ULONG LogContainerCountMin; 06299 ULONG LogContainerCountMax; 06300 ULONG LogGrowthIncrement; 06301 ULONG LogAutoShrinkPercentage; 06302 ULONG TmLogPathOffset; 06303 USHORT TmLogPathLength; 06304 USHORT LoggingMode; 06305 USHORT LogPathLength; 06306 USHORT Reserved; 06307 WCHAR LogPath[1]; 06308 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION; 06309 06310 typedef struct _TXFS_GET_METADATA_INFO_OUT { 06311 struct { 06312 LONGLONG LowPart; 06313 LONGLONG HighPart; 06314 } TxfFileId; 06315 GUID LockingTransaction; 06316 ULONGLONG LastLsn; 06317 ULONG TransactionState; 06318 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT; 06319 06320 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001 06321 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002 06322 06323 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY { 06324 ULONGLONG Offset; 06325 ULONG NameFlags; 06326 LONGLONG FileId; 06327 ULONG Reserved1; 06328 ULONG Reserved2; 06329 LONGLONG Reserved3; 06330 WCHAR FileName[1]; 06331 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY; 06332 06333 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES { 06334 GUID KtmTransaction; 06335 ULONGLONG NumberOfFiles; 06336 ULONGLONG BufferSizeRequired; 06337 ULONGLONG Offset; 06338 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES; 06339 06340 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY { 06341 GUID TransactionId; 06342 ULONG TransactionState; 06343 ULONG Reserved1; 06344 ULONG Reserved2; 06345 LONGLONG Reserved3; 06346 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY; 06347 06348 typedef struct _TXFS_LIST_TRANSACTIONS { 06349 ULONGLONG NumberOfTransactions; 06350 ULONGLONG BufferSizeRequired; 06351 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS; 06352 06353 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT { 06354 _ANONYMOUS_UNION union { 06355 ULONG BufferLength; 06356 UCHAR Buffer[1]; 06357 } DUMMYUNIONNAME; 06358 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT; 06359 06360 typedef struct _TXFS_WRITE_BACKUP_INFORMATION { 06361 UCHAR Buffer[1]; 06362 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION; 06363 06364 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE 06365 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF 06366 06367 typedef struct _TXFS_GET_TRANSACTED_VERSION { 06368 ULONG ThisBaseVersion; 06369 ULONG LatestVersion; 06370 USHORT ThisMiniVersion; 06371 USHORT FirstMiniVersion; 06372 USHORT LatestMiniVersion; 06373 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION; 06374 06375 #define TXFS_SAVEPOINT_SET 0x00000001 06376 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002 06377 #define TXFS_SAVEPOINT_CLEAR 0x00000004 06378 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010 06379 06380 typedef struct _TXFS_SAVEPOINT_INFORMATION { 06381 HANDLE KtmTransaction; 06382 ULONG ActionCode; 06383 ULONG SavepointId; 06384 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION; 06385 06386 typedef struct _TXFS_CREATE_MINIVERSION_INFO { 06387 USHORT StructureVersion; 06388 USHORT StructureLength; 06389 ULONG BaseVersion; 06390 USHORT MiniVersion; 06391 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO; 06392 06393 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO { 06394 BOOLEAN TransactionsActiveAtSnapshot; 06395 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO; 06396 06397 #endif /* (_WIN32_WINNT >= 0x0600) */ 06398 06399 #if (_WIN32_WINNT >= 0x0601) 06400 06401 #define MARK_HANDLE_REALTIME (0x00000020) 06402 #define MARK_HANDLE_NOT_REALTIME (0x00000040) 06403 06404 #define NO_8DOT3_NAME_PRESENT (0x00000001) 06405 #define REMOVED_8DOT3_NAME (0x00000002) 06406 06407 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001) 06408 06409 typedef struct _BOOT_AREA_INFO { 06410 ULONG BootSectorCount; 06411 struct { 06412 LARGE_INTEGER Offset; 06413 } BootSectors[2]; 06414 } BOOT_AREA_INFO, *PBOOT_AREA_INFO; 06415 06416 typedef struct _RETRIEVAL_POINTER_BASE { 06417 LARGE_INTEGER FileAreaOffset; 06418 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE; 06419 06420 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION { 06421 ULONG VolumeFlags; 06422 ULONG FlagMask; 06423 ULONG Version; 06424 ULONG Reserved; 06425 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION; 06426 06427 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION { 06428 CHAR FileSystem[9]; 06429 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION; 06430 06431 #define OPLOCK_LEVEL_CACHE_READ (0x00000001) 06432 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002) 06433 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004) 06434 06435 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001) 06436 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002) 06437 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004) 06438 06439 #define REQUEST_OPLOCK_CURRENT_VERSION 1 06440 06441 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER { 06442 USHORT StructureVersion; 06443 USHORT StructureLength; 06444 ULONG RequestedOplockLevel; 06445 ULONG Flags; 06446 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER; 06447 06448 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001) 06449 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002) 06450 06451 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER { 06452 USHORT StructureVersion; 06453 USHORT StructureLength; 06454 ULONG OriginalOplockLevel; 06455 ULONG NewOplockLevel; 06456 ULONG Flags; 06457 ACCESS_MASK AccessMode; 06458 USHORT ShareMode; 06459 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER; 06460 06461 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1 06462 06463 typedef struct _SD_CHANGE_MACHINE_SID_INPUT { 06464 USHORT CurrentMachineSIDOffset; 06465 USHORT CurrentMachineSIDLength; 06466 USHORT NewMachineSIDOffset; 06467 USHORT NewMachineSIDLength; 06468 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT; 06469 06470 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT { 06471 ULONGLONG NumSDChangedSuccess; 06472 ULONGLONG NumSDChangedFail; 06473 ULONGLONG NumSDUnused; 06474 ULONGLONG NumSDTotal; 06475 ULONGLONG NumMftSDChangedSuccess; 06476 ULONGLONG NumMftSDChangedFail; 06477 ULONGLONG NumMftSDTotal; 06478 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT; 06479 06480 typedef struct _SD_GLOBAL_CHANGE_INPUT { 06481 ULONG Flags; 06482 ULONG ChangeType; 06483 _ANONYMOUS_UNION union { 06484 SD_CHANGE_MACHINE_SID_INPUT SdChange; 06485 } DUMMYUNIONNAME; 06486 } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT; 06487 06488 typedef struct _SD_GLOBAL_CHANGE_OUTPUT { 06489 ULONG Flags; 06490 ULONG ChangeType; 06491 _ANONYMOUS_UNION union { 06492 SD_CHANGE_MACHINE_SID_OUTPUT SdChange; 06493 } DUMMYUNIONNAME; 06494 } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT; 06495 06496 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1 06497 06498 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO { 06499 ULONG ExtendedCode; 06500 ULONG Length; 06501 ULONG Flags; 06502 ULONG Reserved; 06503 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO; 06504 06505 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT { 06506 ULONG Flags; 06507 ULONG NumberOfClusters; 06508 LARGE_INTEGER Cluster[1]; 06509 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT; 06510 06511 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT { 06512 ULONG Offset; 06513 ULONG NumberOfMatches; 06514 ULONG BufferSizeRequired; 06515 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT; 06516 06517 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001 06518 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002 06519 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004 06520 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008 06521 06522 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000 06523 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000 06524 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000 06525 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000 06526 06527 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY { 06528 ULONG OffsetToNext; 06529 ULONG Flags; 06530 LARGE_INTEGER Reserved; 06531 LARGE_INTEGER Cluster; 06532 WCHAR FileName[1]; 06533 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY; 06534 06535 typedef struct _FILE_TYPE_NOTIFICATION_INPUT { 06536 ULONG Flags; 06537 ULONG NumFileTypeIDs; 06538 GUID FileTypeID[1]; 06539 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT; 06540 06541 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001 06542 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002 06543 06544 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c); 06545 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7); 06546 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9); 06547 06548 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED 06549 #define _VIRTUAL_STORAGE_TYPE_DEFINED 06550 typedef struct _VIRTUAL_STORAGE_TYPE { 06551 ULONG DeviceId; 06552 GUID VendorId; 06553 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE; 06554 #endif 06555 06556 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST { 06557 ULONG RequestLevel; 06558 ULONG RequestFlags; 06559 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST; 06560 06561 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1 06562 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2 06563 06564 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY { 06565 ULONG EntryLength; 06566 ULONG DependencyTypeFlags; 06567 ULONG ProviderSpecificFlags; 06568 VIRTUAL_STORAGE_TYPE VirtualStorageType; 06569 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY; 06570 06571 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY { 06572 ULONG EntryLength; 06573 ULONG DependencyTypeFlags; 06574 ULONG ProviderSpecificFlags; 06575 VIRTUAL_STORAGE_TYPE VirtualStorageType; 06576 ULONG AncestorLevel; 06577 ULONG HostVolumeNameOffset; 06578 ULONG HostVolumeNameSize; 06579 ULONG DependentVolumeNameOffset; 06580 ULONG DependentVolumeNameSize; 06581 ULONG RelativePathOffset; 06582 ULONG RelativePathSize; 06583 ULONG DependentDeviceNameOffset; 06584 ULONG DependentDeviceNameSize; 06585 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY; 06586 06587 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE { 06588 ULONG ResponseLevel; 06589 ULONG NumberEntries; 06590 _ANONYMOUS_UNION union { 06591 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[0]; 06592 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[0]; 06593 } DUMMYUNIONNAME; 06594 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE; 06595 06596 #endif /* (_WIN32_WINNT >= 0x0601) */ 06597 06598 typedef struct _FILESYSTEM_STATISTICS { 06599 USHORT FileSystemType; 06600 USHORT Version; 06601 ULONG SizeOfCompleteStructure; 06602 ULONG UserFileReads; 06603 ULONG UserFileReadBytes; 06604 ULONG UserDiskReads; 06605 ULONG UserFileWrites; 06606 ULONG UserFileWriteBytes; 06607 ULONG UserDiskWrites; 06608 ULONG MetaDataReads; 06609 ULONG MetaDataReadBytes; 06610 ULONG MetaDataDiskReads; 06611 ULONG MetaDataWrites; 06612 ULONG MetaDataWriteBytes; 06613 ULONG MetaDataDiskWrites; 06614 } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS; 06615 06616 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1 06617 #define FILESYSTEM_STATISTICS_TYPE_FAT 2 06618 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3 06619 06620 typedef struct _FAT_STATISTICS { 06621 ULONG CreateHits; 06622 ULONG SuccessfulCreates; 06623 ULONG FailedCreates; 06624 ULONG NonCachedReads; 06625 ULONG NonCachedReadBytes; 06626 ULONG NonCachedWrites; 06627 ULONG NonCachedWriteBytes; 06628 ULONG NonCachedDiskReads; 06629 ULONG NonCachedDiskWrites; 06630 } FAT_STATISTICS, *PFAT_STATISTICS; 06631 06632 typedef struct _EXFAT_STATISTICS { 06633 ULONG CreateHits; 06634 ULONG SuccessfulCreates; 06635 ULONG FailedCreates; 06636 ULONG NonCachedReads; 06637 ULONG NonCachedReadBytes; 06638 ULONG NonCachedWrites; 06639 ULONG NonCachedWriteBytes; 06640 ULONG NonCachedDiskReads; 06641 ULONG NonCachedDiskWrites; 06642 } EXFAT_STATISTICS, *PEXFAT_STATISTICS; 06643 06644 typedef struct _NTFS_STATISTICS { 06645 ULONG LogFileFullExceptions; 06646 ULONG OtherExceptions; 06647 ULONG MftReads; 06648 ULONG MftReadBytes; 06649 ULONG MftWrites; 06650 ULONG MftWriteBytes; 06651 struct { 06652 USHORT Write; 06653 USHORT Create; 06654 USHORT SetInfo; 06655 USHORT Flush; 06656 } MftWritesUserLevel; 06657 USHORT MftWritesFlushForLogFileFull; 06658 USHORT MftWritesLazyWriter; 06659 USHORT MftWritesUserRequest; 06660 ULONG Mft2Writes; 06661 ULONG Mft2WriteBytes; 06662 struct { 06663 USHORT Write; 06664 USHORT Create; 06665 USHORT SetInfo; 06666 USHORT Flush; 06667 } Mft2WritesUserLevel; 06668 USHORT Mft2WritesFlushForLogFileFull; 06669 USHORT Mft2WritesLazyWriter; 06670 USHORT Mft2WritesUserRequest; 06671 ULONG RootIndexReads; 06672 ULONG RootIndexReadBytes; 06673 ULONG RootIndexWrites; 06674 ULONG RootIndexWriteBytes; 06675 ULONG BitmapReads; 06676 ULONG BitmapReadBytes; 06677 ULONG BitmapWrites; 06678 ULONG BitmapWriteBytes; 06679 USHORT BitmapWritesFlushForLogFileFull; 06680 USHORT BitmapWritesLazyWriter; 06681 USHORT BitmapWritesUserRequest; 06682 struct { 06683 USHORT Write; 06684 USHORT Create; 06685 USHORT SetInfo; 06686 } BitmapWritesUserLevel; 06687 ULONG MftBitmapReads; 06688 ULONG MftBitmapReadBytes; 06689 ULONG MftBitmapWrites; 06690 ULONG MftBitmapWriteBytes; 06691 USHORT MftBitmapWritesFlushForLogFileFull; 06692 USHORT MftBitmapWritesLazyWriter; 06693 USHORT MftBitmapWritesUserRequest; 06694 struct { 06695 USHORT Write; 06696 USHORT Create; 06697 USHORT SetInfo; 06698 USHORT Flush; 06699 } MftBitmapWritesUserLevel; 06700 ULONG UserIndexReads; 06701 ULONG UserIndexReadBytes; 06702 ULONG UserIndexWrites; 06703 ULONG UserIndexWriteBytes; 06704 ULONG LogFileReads; 06705 ULONG LogFileReadBytes; 06706 ULONG LogFileWrites; 06707 ULONG LogFileWriteBytes; 06708 struct { 06709 ULONG Calls; 06710 ULONG Clusters; 06711 ULONG Hints; 06712 ULONG RunsReturned; 06713 ULONG HintsHonored; 06714 ULONG HintsClusters; 06715 ULONG Cache; 06716 ULONG CacheClusters; 06717 ULONG CacheMiss; 06718 ULONG CacheMissClusters; 06719 } Allocate; 06720 } NTFS_STATISTICS, *PNTFS_STATISTICS; 06721 06722 #endif /* _FILESYSTEMFSCTL_ */ 06723 06724 #define SYMLINK_FLAG_RELATIVE 1 06725 06726 typedef struct _REPARSE_DATA_BUFFER { 06727 ULONG ReparseTag; 06728 USHORT ReparseDataLength; 06729 USHORT Reserved; 06730 _ANONYMOUS_UNION union { 06731 struct { 06732 USHORT SubstituteNameOffset; 06733 USHORT SubstituteNameLength; 06734 USHORT PrintNameOffset; 06735 USHORT PrintNameLength; 06736 ULONG Flags; 06737 WCHAR PathBuffer[1]; 06738 } SymbolicLinkReparseBuffer; 06739 struct { 06740 USHORT SubstituteNameOffset; 06741 USHORT SubstituteNameLength; 06742 USHORT PrintNameOffset; 06743 USHORT PrintNameLength; 06744 WCHAR PathBuffer[1]; 06745 } MountPointReparseBuffer; 06746 struct { 06747 UCHAR DataBuffer[1]; 06748 } GenericReparseBuffer; 06749 } DUMMYUNIONNAME; 06750 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; 06751 06752 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) 06753 06754 typedef struct _REPARSE_GUID_DATA_BUFFER { 06755 ULONG ReparseTag; 06756 USHORT ReparseDataLength; 06757 USHORT Reserved; 06758 GUID ReparseGuid; 06759 struct { 06760 UCHAR DataBuffer[1]; 06761 } GenericReparseBuffer; 06762 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER; 06763 06764 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer) 06765 06766 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) 06767 06768 /* Reserved reparse tags */ 06769 #define IO_REPARSE_TAG_RESERVED_ZERO (0) 06770 #define IO_REPARSE_TAG_RESERVED_ONE (1) 06771 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE 06772 06773 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000)) 06774 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000)) 06775 06776 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF) 06777 06778 #define IsReparseTagValid(tag) ( \ 06779 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \ 06780 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \ 06781 ) 06782 06783 /* MicroSoft reparse point tags */ 06784 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) 06785 #define IO_REPARSE_TAG_HSM (0xC0000004L) 06786 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L) 06787 #define IO_REPARSE_TAG_HSM2 (0x80000006L) 06788 #define IO_REPARSE_TAG_SIS (0x80000007L) 06789 #define IO_REPARSE_TAG_WIM (0x80000008L) 06790 #define IO_REPARSE_TAG_CSV (0x80000009L) 06791 #define IO_REPARSE_TAG_DFS (0x8000000AL) 06792 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL) 06793 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL) 06794 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L) 06795 #define IO_REPARSE_TAG_DFSR (0x80000012L) 06796 06797 #pragma pack(4) 06798 typedef struct _REPARSE_INDEX_KEY { 06799 ULONG FileReparseTag; 06800 LARGE_INTEGER FileId; 06801 } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY; 06802 #pragma pack() 06803 06804 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS) 06805 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS) 06806 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS) 06807 06808 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) 06809 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) 06810 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) 06811 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA) 06812 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) 06813 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) 06814 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) 06815 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) 06816 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) 06817 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) 06818 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) 06819 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) 06820 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) 06821 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS) 06822 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS) 06823 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) 06824 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA) 06825 06826 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) 06827 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA) 06828 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) 06829 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA) 06830 06831 #define FILE_PIPE_READ_DATA 0x00000000 06832 #define FILE_PIPE_WRITE_SPACE 0x00000001 06833 06834 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER { 06835 HANDLE EventHandle; 06836 ULONG KeyValue; 06837 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER; 06838 06839 typedef struct _FILE_PIPE_EVENT_BUFFER { 06840 ULONG NamedPipeState; 06841 ULONG EntryType; 06842 ULONG ByteCount; 06843 ULONG KeyValue; 06844 ULONG NumberRequests; 06845 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER; 06846 06847 typedef struct _FILE_PIPE_PEEK_BUFFER { 06848 ULONG NamedPipeState; 06849 ULONG ReadDataAvailable; 06850 ULONG NumberOfMessages; 06851 ULONG MessageLength; 06852 CHAR Data[1]; 06853 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; 06854 06855 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER { 06856 LARGE_INTEGER Timeout; 06857 ULONG NameLength; 06858 BOOLEAN TimeoutSpecified; 06859 WCHAR Name[1]; 06860 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER; 06861 06862 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER { 06863 #if !defined(BUILD_WOW6432) 06864 PVOID ClientSession; 06865 PVOID ClientProcess; 06866 #else 06867 ULONGLONG ClientSession; 06868 ULONGLONG ClientProcess; 06869 #endif 06870 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER; 06871 06872 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15 06873 06874 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX { 06875 #if !defined(BUILD_WOW6432) 06876 PVOID ClientSession; 06877 PVOID ClientProcess; 06878 #else 06879 ULONGLONG ClientSession; 06880 ULONGLONG ClientProcess; 06881 #endif 06882 USHORT ClientComputerNameLength; 06883 WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1]; 06884 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX; 06885 06886 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA) 06887 06888 typedef enum _LINK_TRACKING_INFORMATION_TYPE { 06889 NtfsLinkTrackingInformation, 06890 DfsLinkTrackingInformation 06891 } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE; 06892 06893 typedef struct _LINK_TRACKING_INFORMATION { 06894 LINK_TRACKING_INFORMATION_TYPE Type; 06895 UCHAR VolumeId[16]; 06896 } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION; 06897 06898 typedef struct _REMOTE_LINK_TRACKING_INFORMATION { 06899 PVOID TargetFileObject; 06900 ULONG TargetLinkTrackingInformationLength; 06901 UCHAR TargetLinkTrackingInformationBuffer[1]; 06902 } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION; 06903 06904 #define IO_OPEN_PAGING_FILE 0x0002 06905 #define IO_OPEN_TARGET_DIRECTORY 0x0004 06906 #define IO_STOP_ON_SYMLINK 0x0008 06907 #define IO_MM_PAGING_FILE 0x0010 06908 06909 typedef VOID 06910 (NTAPI *PDRIVER_FS_NOTIFICATION) ( 06911 _In_ PDEVICE_OBJECT DeviceObject, 06912 _In_ BOOLEAN FsActive); 06913 06914 typedef enum _FS_FILTER_SECTION_SYNC_TYPE { 06915 SyncTypeOther = 0, 06916 SyncTypeCreateSection 06917 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE; 06918 06919 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE { 06920 NotifyTypeCreate = 0, 06921 NotifyTypeRetired 06922 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE; 06923 06924 typedef union _FS_FILTER_PARAMETERS { 06925 struct { 06926 PLARGE_INTEGER EndingOffset; 06927 PERESOURCE *ResourceToRelease; 06928 } AcquireForModifiedPageWriter; 06929 struct { 06930 PERESOURCE ResourceToRelease; 06931 } ReleaseForModifiedPageWriter; 06932 struct { 06933 FS_FILTER_SECTION_SYNC_TYPE SyncType; 06934 ULONG PageProtection; 06935 } AcquireForSectionSynchronization; 06936 struct { 06937 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType; 06938 BOOLEAN POINTER_ALIGNMENT SafeToRecurse; 06939 } NotifyStreamFileObject; 06940 struct { 06941 PVOID Argument1; 06942 PVOID Argument2; 06943 PVOID Argument3; 06944 PVOID Argument4; 06945 PVOID Argument5; 06946 } Others; 06947 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS; 06948 06949 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1 06950 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2 06951 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3 06952 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4 06953 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5 06954 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6 06955 06956 typedef struct _FS_FILTER_CALLBACK_DATA { 06957 ULONG SizeOfFsFilterCallbackData; 06958 UCHAR Operation; 06959 UCHAR Reserved; 06960 struct _DEVICE_OBJECT *DeviceObject; 06961 struct _FILE_OBJECT *FileObject; 06962 FS_FILTER_PARAMETERS Parameters; 06963 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA; 06964 06965 typedef NTSTATUS 06966 (NTAPI *PFS_FILTER_CALLBACK) ( 06967 _In_ PFS_FILTER_CALLBACK_DATA Data, 06968 _Out_ PVOID *CompletionContext); 06969 06970 typedef VOID 06971 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) ( 06972 _In_ PFS_FILTER_CALLBACK_DATA Data, 06973 _In_ NTSTATUS OperationStatus, 06974 _In_ PVOID CompletionContext); 06975 06976 typedef struct _FS_FILTER_CALLBACKS { 06977 ULONG SizeOfFsFilterCallbacks; 06978 ULONG Reserved; 06979 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization; 06980 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization; 06981 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization; 06982 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization; 06983 PFS_FILTER_CALLBACK PreAcquireForCcFlush; 06984 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush; 06985 PFS_FILTER_CALLBACK PreReleaseForCcFlush; 06986 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush; 06987 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter; 06988 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter; 06989 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter; 06990 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter; 06991 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS; 06992 06993 #if (NTDDI_VERSION >= NTDDI_WINXP) 06994 NTKERNELAPI 06995 NTSTATUS 06996 NTAPI 06997 FsRtlRegisterFileSystemFilterCallbacks( 06998 _In_ struct _DRIVER_OBJECT *FilterDriverObject, 06999 _In_ PFS_FILTER_CALLBACKS Callbacks); 07000 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 07001 07002 #if (NTDDI_VERSION >= NTDDI_VISTA) 07003 NTKERNELAPI 07004 NTSTATUS 07005 NTAPI 07006 FsRtlNotifyStreamFileObject( 07007 _In_ struct _FILE_OBJECT * StreamFileObject, 07008 _In_opt_ struct _DEVICE_OBJECT *DeviceObjectHint, 07009 _In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType, 07010 _In_ BOOLEAN SafeToRecurse); 07011 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 07012 07013 #define DO_VERIFY_VOLUME 0x00000002 07014 #define DO_BUFFERED_IO 0x00000004 07015 #define DO_EXCLUSIVE 0x00000008 07016 #define DO_DIRECT_IO 0x00000010 07017 #define DO_MAP_IO_BUFFER 0x00000020 07018 #define DO_DEVICE_HAS_NAME 0x00000040 07019 #define DO_DEVICE_INITIALIZING 0x00000080 07020 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 07021 #define DO_LONG_TERM_REQUESTS 0x00000200 07022 #define DO_NEVER_LAST_DEVICE 0x00000400 07023 #define DO_SHUTDOWN_REGISTERED 0x00000800 07024 #define DO_BUS_ENUMERATED_DEVICE 0x00001000 07025 #define DO_POWER_PAGABLE 0x00002000 07026 #define DO_POWER_INRUSH 0x00004000 07027 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 07028 #define DO_SUPPORTS_TRANSACTIONS 0x00040000 07029 #define DO_FORCE_NEITHER_IO 0x00080000 07030 #define DO_VOLUME_DEVICE_OBJECT 0x00100000 07031 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000 07032 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000 07033 #define DO_DISALLOW_EXECUTE 0x00800000 07034 07035 extern KSPIN_LOCK IoStatisticsLock; 07036 extern ULONG IoReadOperationCount; 07037 extern ULONG IoWriteOperationCount; 07038 extern ULONG IoOtherOperationCount; 07039 extern LARGE_INTEGER IoReadTransferCount; 07040 extern LARGE_INTEGER IoWriteTransferCount; 07041 extern LARGE_INTEGER IoOtherTransferCount; 07042 07043 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64 07044 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024 07045 07046 #if (NTDDI_VERSION >= NTDDI_VISTA) 07047 typedef struct _IO_PRIORITY_INFO { 07048 ULONG Size; 07049 ULONG ThreadPriority; 07050 ULONG PagePriority; 07051 IO_PRIORITY_HINT IoPriority; 07052 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO; 07053 #endif 07054 $endif (_NTIFS_) Generated on Sat May 26 2012 04:29:36 for ReactOS by
1.7.6.1
|