7321{
7323
7326
7328
7331
7333 ULONG modifiedIoControlCode = 0;
7334 GUID activityId = {0};
7335
7336
7337
7338
7339
7340
7341
7346
7347
7348
7349
7350
7351
7352
7353
7356
7357 #if BUILD_WOW64_ENABLED && defined(_WIN64)
7358
7359 if (IoIs32bitProcess(
Irp)) {
7360
7362
7364
7367
7369 goto SetStatusAndReturn;
7370 }
7371 }
7372 else
7373
7374 #endif
7375
7376 {
7379
7381
7384
7386 goto SetStatusAndReturn;
7387 }
7388 }
7389 }
7390
7391
7393
7396
7398
7400 goto SetStatusAndReturn;
7401
7402 }
7403
7404 Irp->IoStatus.Information = 0;
7405
7406
7407 switch (controlCode) {
7408
7410
7412
7415 break;
7416 }
7417
7420
7423 break;
7424 }
7425
7426 uniqueId =
Irp->AssociatedIrp.SystemBuffer;
7430
7433
7436 break;
7437 }
7438
7442
7444 Irp->IoStatus.Information =
sizeof(
USHORT) +
7446 break;
7447 }
7448
7450
7452
7454
7457
7460 break;
7461 }
7462
7463 name =
Irp->AssociatedIrp.SystemBuffer;
7466
7469
7472 break;
7473 }
7474
7477
7479 Irp->IoStatus.Information =
sizeof(
USHORT) +
name->NameLength;
7480 break;
7481 }
7482
7484
7486 WCHAR driveLetterNameBuffer[10] = {0};
7490
7493
7496 break;
7497 }
7498
7502 '8CcS');
7503
7504 if (!valueName) {
7506 break;
7507 }
7508
7512
7513 driveLetterName.
Buffer = driveLetterNameBuffer;
7514 driveLetterName.
MaximumLength =
sizeof(driveLetterNameBuffer);
7515 driveLetterName.
Length = 0;
7516
7520 queryTable[0].
Name = valueName;
7523
7525 L"\\Registry\\Machine\\System\\DISK",
7527
7530 break;
7531 }
7532
7533 if (driveLetterName.
Length == 4 &&
7534 driveLetterName.
Buffer[0] ==
'%' &&
7535 driveLetterName.
Buffer[1] ==
':') {
7536
7537 driveLetterName.
Buffer[0] = 0xFF;
7538
7539 }
else if (driveLetterName.
Length != 4 ||
7542 driveLetterName.
Buffer[1] !=
':') {
7543
7546 break;
7547 }
7548
7549 suggestedName =
Irp->AssociatedIrp.SystemBuffer;
7553
7554 Irp->IoStatus.Information =
7556
7558 Irp->IoStatus.Information) {
7559
7560 Irp->IoStatus.Information =
7564 break;
7565 }
7566
7568 L"\\Registry\\Machine\\System\\DISK",
7569 valueName);
7570
7572
7574 suggestedName->
Name[12] = driveLetterName.
Buffer[0];
7575 suggestedName->
Name[13] =
':';
7576
7577
7578
7579
7581
7582 break;
7583 }
7584
7585 default:
7587 break;
7588 }
7589
7593
7594
7597 }
7598
7599 if (commonExtension->
IsFdo){
7600
7603 size_t sizeNeeded;
7604
7605
7606
7607
7608
7609
7613 } else {
7615 }
7616
7618 sizeNeeded +
7620 '9CcS');
7621
7623
7628 goto SetStatusAndReturn;
7629 }
7630
7636 1,
7641 } else {
7642
7643
7644
7646 goto SetStatusAndReturn;
7647 }
7648 } else {
7653 }
7654
7655
7656
7657
7658
7659
7661 function++;
7663
7664 } else {
7666 }
7667
7668
7669
7670
7671
7672
7676 ) {
7677
7678 modifiedIoControlCode = (controlCode & ~0xffff0000);
7680
7681 } else {
7682
7683 modifiedIoControlCode = controlCode;
7684
7685 }
7686
7688
7689
7690 switch (modifiedIoControlCode) {
7691
7693
7695
7698
7699
7700
7701
7702
7705
7709
7710 }
else if (!commonExtension->
IsFdo) {
7711
7712
7713
7714
7715
7716
7718
7721
7722 } else {
7723
7726
7728 info =
Irp->AssociatedIrp.SystemBuffer;
7729
7730 *
info = fdoExtension->PrivateFdoData->HotplugInfo;
7736 }
7737 break;
7738 }
7739
7741
7743
7746
7747
7748
7749
7750
7752
7756 goto SetStatusAndReturn;
7757
7758 }
7759
7760 if (!commonExtension->
IsFdo) {
7761
7762
7763
7764
7765
7766
7768
7771
7772 } else {
7773
7776
7778
7779 if (
info->Size != fdoExtension->PrivateFdoData->HotplugInfo.Size)
7780 {
7782 }
7783
7784 if (
info->MediaRemovable != fdoExtension->PrivateFdoData->HotplugInfo.MediaRemovable)
7785 {
7787 }
7788
7789 if (
info->MediaHotplug != fdoExtension->PrivateFdoData->HotplugInfo.MediaHotplug)
7790 {
7792 }
7793
7795 {
7796 if (
info->WriteCacheEnableOverride != fdoExtension->PrivateFdoData->HotplugInfo.WriteCacheEnableOverride)
7797 {
7798 fdoExtension->PrivateFdoData->HotplugInfo.WriteCacheEnableOverride =
info->WriteCacheEnableOverride;
7799
7800
7801
7802
7803
7804 ClassSetDeviceParameter(fdoExtension,
7807 info->WriteCacheEnableOverride);
7808 }
7809
7810 fdoExtension->PrivateFdoData->HotplugInfo.DeviceHotplug =
info->DeviceHotplug;
7811
7812
7813
7814
7815
7816 ClassSetDeviceParameter(fdoExtension,
7820 }
7821
7823
7826 }
7827
7828 break;
7829 }
7830
7833
7836
7838
7840
7841
7842
7843
7844
7845
7847
7848
7849
7850
7851
7852
7855
7857 "buffer too small\n"));
7858
7860 Irp->IoStatus.Information =
sizeof(
ULONG);
7861
7863
7866
7868 goto SetStatusAndReturn;
7869 }
7870 }
7871
7872 if (!commonExtension->
IsFdo) {
7873
7874
7875
7876
7877
7879
7881
7883
7885
7886 goto SetStatusAndReturn;
7887
7888 } else {
7889
7891
7892 }
7893
7895
7896
7897
7898
7899
7900
7901
7902
7904 "media count\n"));
7905
7906
7907
7908
7909
7911
7914 Irp->IoStatus.Information = 0;
7919 goto SetStatusAndReturn;
7920
7921 break;
7922 }
7923
7924
7925
7926
7927
7929
7930 irp2->Tail.Overlay.Thread =
Irp->Tail.Overlay.Thread;
7932
7933
7934
7935
7936
7937
7941
7942
7943
7944
7945
7946
7953
7960
7961
7962
7963
7964
7965
7966
7967
7969
7971
7972 }
7973
7974
7975
7976
7977
7981
7982
7983
7984
7985
7987
7988
7989
7990
7991
7992
7995 }
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8010 srb,
8013 0,
8015
8016 break;
8017 }
8018
8021
8023
8025
8027
8030
8031
8032
8033
8034
8036
8040 goto SetStatusAndReturn;
8041 }
8042
8043 if (!commonExtension->
IsFdo) {
8044
8045
8046
8047
8048
8049
8051
8054 }
8055 else {
8056
8057
8058
8059
8060
8064 ((modifiedIoControlCode ==
8068
8072 }
8073
8074 break;
8075 }
8076
8078
8080
8083
8084
8085
8086
8087
8089 Irp->IoStatus.Information = 0;
8090
8092
8096 goto SetStatusAndReturn;
8097 }
8098
8099 if (!commonExtension->
IsFdo) {
8100
8101
8102
8103
8104
8105
8107
8109
8112
8113 } else {
8114
8115
8116
8117
8118
8121 srb);
8122 }
8123 goto SetStatusAndReturn;
8124 }
8125
8128
8129
8130
8131
8132
8134
8135 if (!commonExtension->
IsFdo) {
8136
8137
8139
8142 goto SetStatusAndReturn;
8143
8144 } else {
8146 }
8147
8149 {
8153 }
8154 else
8155 {
8159 }
8160
8161
8162
8163
8164
8166
8167
8168
8169
8170
8174 }
8175
8177 srb,
8180 0,
8182
8183 break;
8184 }
8185
8188
8189 if (!commonExtension->
IsFdo) {
8190
8192
8195 goto SetStatusAndReturn;
8196 }
8197
8198
8199
8200
8201
8203
8204 break;
8205
8206 }
8207
8211
8212
8213
8214
8215
8217
8218 if (!commonExtension->
IsFdo) {
8219
8220
8222
8224
8226 goto SetStatusAndReturn;
8227 } else {
8229 }
8230
8232
8233 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_IOCTL,
"ClassDeviceControl: call to eject paging device - "
8234 "failure\n"));
8235
8238
8239 Irp->IoStatus.Information = 0;
8240
8242
8245 goto SetStatusAndReturn;
8246 }
8247
8248
8249
8250
8251
8252
8259
8261
8262 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_IOCTL,
"ClassDeviceControl: call to eject protected locked "
8263 "device - failure\n"));
8264
8267 Irp->IoStatus.Information = 0;
8268
8270
8273
8278
8279 goto SetStatusAndReturn;
8280 }
8281
8284
8287
8290 } else {
8292 }
8293
8294
8295
8296
8297
8300 srb,
8303 0,
8305
8308
8309 break;
8310 }
8311
8313
8315
8316 if (commonExtension->
IsFdo) {
8317
8321
8324
8327 }
8328 else {
8329
8330
8332
8335 }
8336 break;
8337 }
8338
8340
8342
8345
8347 Irp->AssociatedIrp.SystemBuffer;
8350
8354
8357
8358 } else {
8361 }
8362
8366
8367 break;
8368 }
8369
8370
8372
8374
8377
8378
8379
8380
8381
8384
8388 break;
8389 }
8390
8391 if (!commonExtension->
IsFdo) {
8392
8393
8394
8395
8396
8397
8399
8402 }
8403 else {
8404
8409
8412
8415
8420 readCapacity->NumberOfBlocks.QuadPart++;
8421
8423
8424
8425
8426
8427
8428 diskLength.
QuadPart = readCapacity->NumberOfBlocks.QuadPart *
8429 readCapacity->BlockLength;
8430
8433
8434 } else {
8435
8436
8437
8438 TracePrint((
TRACE_LEVEL_WARNING, TRACE_FLAG_IOCTL,
"ClassDeviceControl: ClassReadDriveCapacity failed: 0x%X IsCachedDriveCapDataValid: %d\n",
8441 Irp->IoStatus.Information = 0;
8442 }
8445 }
8446
8447 break;
8448 }
8449
8451
8453
8455
8461 break;
8462 }
8463
8464 if (!commonExtension->
IsFdo) {
8465
8466
8468
8472 break;
8473 }
8474
8475
8476
8477
8478
8479
8480 switch (
query->PropertyId ) {
8481
8483
8485 break;
8486 }
8487
8489
8491 break;
8492 }
8493
8494
8495
8496
8498
8500 break;
8501 }
8502
8504
8506 break;
8507 }
8508
8510
8512 break;
8513 }
8514
8516
8518 break;
8519 }
8520
8522
8524 break;
8525 }
8526
8528
8530 break;
8531 }
8532
8533 default: {
8534
8535
8536
8537
8538
8540
8543 break;
8544 }
8545 }
8546
8548 break;
8549 }
8550
8552
8554
8555 if (!commonExtension->
IsFdo) {
8556
8557
8559
8562 break;
8563 }
8564
8565
8566
8567
8568
8570 break;
8571 }
8572
8574
8576
8578
8584 break;
8585 }
8586
8589
8595 break;
8596 }
8597
8598 if (!commonExtension->
IsFdo) {
8599
8600
8602
8606 break;
8607 }
8608
8609 switch(dsmAttributes->
Action) {
8610
8611
8614 break;
8615 }
8616
8619 break;
8620 }
8621
8624 break;
8625 }
8626
8629 break;
8630 }
8631
8632
8633 default: {
8634
8635
8636
8637
8638
8639
8641
8644 break;
8645 }
8646 }
8647
8649 break;
8650 }
8651
8653
8654 if (commonExtension->
IsFdo) {
8655
8657
8658 } else {
8659
8661
8664 }
8665
8667
8668 break;
8669 }
8670
8672
8674
8676 break;
8677 }
8678
8679#if (NTDDI_VERSION >= NTDDI_WINTRHESHOLD)
8682
8684 break;
8685 }
8686
8688 if (!commonExtension->
IsFdo) {
8689
8691
8694 goto SetStatusAndReturn;
8695 }
8696
8698 break;
8699 }
8700
8702 if (!commonExtension->
IsFdo) {
8703
8705
8708 goto SetStatusAndReturn;
8709 }
8710
8712 break;
8713 }
8714#endif
8715
8716
8717 default: {
8718
8719 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_IOCTL,
"IoDeviceControl: Unsupported device IOCTL %x for %p\n",
8721
8722
8723
8724
8725
8726
8728
8729
8730
8731
8732
8734
8737 break;
8738 }
8739
8740 }
8741
8742SetStatusAndReturn:
8743
8745
8747}
#define SRB_CLASS_FLAGS_LOW_PRIORITY
#define FDO_HACK_NO_RESERVE6
#define CLASSP_REG_WRITE_CACHE_VALUE_NAME
#define CLASSP_REG_REMOVAL_POLICY_VALUE_NAME
#define CLASSP_REG_SUBKEY_NAME
#define SCSIOP_TEST_UNIT_READY
#define SCSIOP_RELEASE_UNIT
#define SCSIOP_RESERVE_UNIT
#define SCSIOP_START_STOP_UNIT
NTSTATUS InitializeStorageRequestBlock(_Inout_bytecount_(ByteSize) PSTORAGE_REQUEST_BLOCK Srb, _In_ USHORT AddressType, _In_ ULONG ByteSize, _In_ ULONG NumSrbExData,...)
NTSTATUS ClasspDeviceLBProvisioningProperty(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspWriteCacheProperty(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspDeviceTrimProcess(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ PGUID ActivityId, _Inout_ PSCSI_REQUEST_BLOCK Srb)
_IRQL_requires_same_ NTSTATUS ClasspStorageEventNotification(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp)
NTSTATUS ClassDeviceHwFirmwareDownloadProcess(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspDeviceGetLBAStatus(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspPersistentReserve(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspDuidQueryProperty(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS ClasspAccessAlignmentProperty(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClassDeviceHwFirmwareGetInfoProcess(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp)
NTSTATUS ClasspPriorityHint(PDEVICE_OBJECT DeviceObject, PIRP Irp)
NTSTATUS ClasspDeviceSeekPenaltyProperty(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspDeviceTrimProperty(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspEjectionControl(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN MEDIA_LOCK_TYPE LockType, IN BOOLEAN Lock)
NTSTATUS ClassDeviceGetLBProvisioningResources(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClassDeviceHwFirmwareActivateProcess(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspDeviceMediaTypeProperty(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _Inout_ PSCSI_REQUEST_BLOCK Srb)
NTSTATUS ClasspMcnControl(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN PIRP Irp, IN PSCSI_REQUEST_BLOCK Srb)
#define ClassAcquireRemoveLock(devobj, tag)
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE
SCSIPORT_API NTSTATUS NTAPI ClassSendSrbAsynchronous(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PSCSI_REQUEST_BLOCK Srb, _In_ PIRP Irp, _In_reads_bytes_opt_(BufferLength) __drv_aliasesMem PVOID BufferAddress, _In_ ULONG BufferLength, _In_ BOOLEAN WriteToDevice)
IO_COMPLETION_ROUTINE ClassCheckVerifyComplete
_Must_inspect_result_ NTSTATUS NTAPI ClassReadDriveCapacity(_In_ PDEVICE_OBJECT Fdo)
#define DBGGETIOCTLSTR(_ioctl)
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeSetEvent(pEvt, foo, foo2)
#define IOCTL_STORAGE_CHECK_VERIFY2
#define IOCTL_STORAGE_LOAD_MEDIA2
NTSYSAPI NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR)
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
struct _MOUNTDEV_NAME MOUNTDEV_NAME
struct _MOUNTDEV_UNIQUE_ID MOUNTDEV_UNIQUE_ID
struct _STORAGE_HOTPLUG_INFO STORAGE_HOTPLUG_INFO
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
#define IOCTL_STORAGE_GET_HOTPLUG_INFO
struct _MOUNTDEV_SUGGESTED_LINK_NAME MOUNTDEV_SUGGESTED_LINK_NAME
#define RTL_REGISTRY_ABSOLUTE
#define RTL_QUERY_REGISTRY_REQUIRED
#define RTL_QUERY_REGISTRY_DIRECT
#define IOCTL_STORAGE_QUERY_PROPERTY
#define IOCTL_STORAGE_RELEASE
#define DeviceDsmAction_OffloadRead
#define IOCTL_STORAGE_EVENT_NOTIFICATION
#define DeviceDsmAction_Allocation
struct _STORAGE_DEVICE_NUMBER STORAGE_DEVICE_NUMBER
#define IOCTL_STORAGE_SET_HOTPLUG_INFO
#define IOCTL_STORAGE_GET_DEVICE_NUMBER
#define IOCTL_STORAGE_FIRMWARE_ACTIVATE
#define IOCTL_STORAGE_CHECK_VERIFY
#define IOCTL_STORAGE_READ_CAPACITY
#define IOCTL_STORAGE_FIRMWARE_DOWNLOAD
#define DeviceDsmAction_OffloadWrite
#define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES
#define IOCTL_STORAGE_PERSISTENT_RESERVE_IN
#define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT
#define IOCTL_STORAGE_LOAD_MEDIA
#define IOCTL_STORAGE_RESERVE
@ StorageDeviceUniqueIdProperty
@ StorageDeviceMediumProductType
@ StorageDeviceSeekPenaltyProperty
@ StorageDeviceLBProvisioningProperty
@ StorageDeviceWriteCacheProperty
@ StorageDeviceTrimProperty
@ StorageDeviceCopyOffloadProperty
@ StorageAccessAlignmentProperty
#define IOCTL_STORAGE_FIRMWARE_GET_INFO
#define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES
#define IOCTL_STORAGE_FIND_NEW_DEVICES
#define IOCTL_STORAGE_BASE
#define IOCTL_STORAGE_MCN_CONTROL
#define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT
#define DeviceDsmAction_Trim
#define IOCTL_STORAGE_EJECT_MEDIA
#define IOCTL_STORAGE_EJECTION_CONTROL
#define IOCTL_STORAGE_MEDIA_REMOVAL
#define IoCopyCurrentIrpStackLocationToNext(Irp)
#define IoCompleteRequest
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
#define STATUS_INVALID_PARAMETER_2
#define STATUS_INVALID_PARAMETER_1
#define STATUS_INVALID_PARAMETER_3
#define STATUS_FILES_OPEN
VOID NTAPI IoInvalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_RELATION_TYPE Type)
#define IOCTL_SCSI_PASS_THROUGH
#define IOCTL_SCSI_PASS_THROUGH_DIRECT
#define SCSIOP_RELEASE_UNIT10
#define SCSIOP_RESERVE_UNIT10
#define REVERSE_BYTES_QUAD(Destination, Source)
#define REVERSE_BYTES(Destination, Source)
#define SRB_TYPE_STORAGE_REQUEST_BLOCK
#define STORAGE_ADDRESS_TYPE_BTL8
#define IOCTL_SCSI_PASS_THROUGH_DIRECT_EX
#define IOCTL_SCSI_PASS_THROUGH_EX
#define STATUS_BUFFER_OVERFLOW
FORCEINLINE VOID SrbSetRequestAttribute(_In_ PVOID Srb, _In_ UCHAR RequestAttribute)
FORCEINLINE VOID SrbSetCdbLength(_In_ PVOID Srb, _In_ UCHAR CdbLength)
FORCEINLINE VOID SrbSetTimeOutValue(_In_ PVOID Srb, _In_ ULONG TimeOutValue)
BOOLEAN IsCachedDriveCapDataValid
READ_CAPACITY_DATA_EX LastKnownDriveCapacityData
PDEVICE_OBJECT DeviceObject
UNICODE_STRING DeviceName
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
UNICODE_STRING MountedDeviceInterfaceName
LARGE_INTEGER PartitionLength
DEVICE_DATA_MANAGEMENT_SET_ACTION Action
ULONG DataSetRangesLength
KEVENT EjectSynchronizationEvent
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
PDEVICE_OBJECT DeviceObject
BOOLEAN UseOnlyIfThereAreNoOtherLinks
LARGE_INTEGER LogicalBlockAddress
#define FIELD_OFFSET(t, f)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INFO_LENGTH_MISMATCH
#define STATUS_DEVICE_BUSY
struct _CDB::_CDB10 CDB10
struct _CDB::_CDB6GENERIC CDB6GENERIC
struct _CDB::_START_STOP START_STOP
FORCEINLINE VOID IoSetNextIrpStackLocation(_Inout_ PIRP Irp)
@ RemovalPolicyExpectSurpriseRemoval
@ RemovalPolicyExpectOrderlyRemoval
#define RTL_QUERY_REGISTRY_TYPECHECK
#define RTL_QUERY_REGISTRY_TYPECHECK_SHIFT