mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 12:47:16 +00:00
[USBSTOR]
- Make DeviceId generation to match ms usbstor - Don't hardcode the device type in USBSTOR_PdoHandleQueryHardwareId - Don't hardcode device type in USBSTOR_PdoHandleQueryCompatibleId - Hackfix generation of instance id - Add comments - Cleanup code - Usbstor now receives ioctl from disk.sys svn path=/branches/usb-bringup/; revision=51582
This commit is contained in:
parent
e84208fd18
commit
c071ae0f59
1 changed files with 53 additions and 83 deletions
|
@ -80,7 +80,7 @@ USBSTOR_GetDeviceType(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LPCWSTR
|
LPCSTR
|
||||||
USBSTOR_GetGenericType(
|
USBSTOR_GetGenericType(
|
||||||
IN PUFI_INQUIRY_RESPONSE InquiryData)
|
IN PUFI_INQUIRY_RESPONSE InquiryData)
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,7 @@ USBSTOR_GetGenericType(
|
||||||
//
|
//
|
||||||
// FIXME: check if floppy
|
// FIXME: check if floppy
|
||||||
//
|
//
|
||||||
return L"GenDisk";
|
return "GenDisk";
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -109,42 +109,42 @@ USBSTOR_GetGenericType(
|
||||||
//
|
//
|
||||||
// sequential device, i.e magnetic tape
|
// sequential device, i.e magnetic tape
|
||||||
//
|
//
|
||||||
return L"GenSequential";
|
return "GenSequential";
|
||||||
}
|
}
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// write once device
|
// write once device
|
||||||
//
|
//
|
||||||
return L"GenWorm";
|
return "GenWorm";
|
||||||
}
|
}
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// CDROM device
|
// CDROM device
|
||||||
//
|
//
|
||||||
return L"GenCdRom";
|
return "GenCdRom";
|
||||||
}
|
}
|
||||||
case 7:
|
case 7:
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// optical memory device
|
// optical memory device
|
||||||
//
|
//
|
||||||
return L"GenOptical";
|
return "GenOptical";
|
||||||
}
|
}
|
||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// medium change device
|
// medium change device
|
||||||
//
|
//
|
||||||
return L"GenChanger";
|
return "GenChanger";
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// other device
|
// other device
|
||||||
//
|
//
|
||||||
return L"UsbstorOther";
|
return "UsbstorOther";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,8 +254,6 @@ USBSTOR_PdoHandleQueryDeviceText(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
USBSTOR_PdoHandleQueryDeviceId(
|
USBSTOR_PdoHandleQueryDeviceId(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
|
@ -270,8 +268,6 @@ USBSTOR_PdoHandleQueryDeviceId(
|
||||||
ANSI_STRING AnsiString;
|
ANSI_STRING AnsiString;
|
||||||
UNICODE_STRING DeviceId;
|
UNICODE_STRING DeviceId;
|
||||||
|
|
||||||
DPRINT1("USBSTOR_PdoHandleQueryDeviceId\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get device extension
|
// get device extension
|
||||||
//
|
//
|
||||||
|
@ -300,21 +296,13 @@ USBSTOR_PdoHandleQueryDeviceId(
|
||||||
//
|
//
|
||||||
// lets create device string
|
// lets create device string
|
||||||
//
|
//
|
||||||
Offset = sprintf(&Buffer[Offset], "USBSTOR\\") + 1;
|
Offset = sprintf(&Buffer[Offset], "USBSTOR\\");
|
||||||
|
Offset += sprintf(&Buffer[Offset], DeviceType);
|
||||||
//
|
Offset += sprintf(&Buffer[Offset], "&Ven_");
|
||||||
// copy vendor id
|
|
||||||
//
|
|
||||||
Offset += CopyField(InquiryData->Vendor, &Buffer[Offset], 8);
|
Offset += CopyField(InquiryData->Vendor, &Buffer[Offset], 8);
|
||||||
|
Offset += sprintf(&Buffer[Offset], "&Prod_");
|
||||||
//
|
|
||||||
// copy product identifier
|
|
||||||
//
|
|
||||||
Offset += CopyField(InquiryData->Product, &Buffer[Offset], 16);
|
Offset += CopyField(InquiryData->Product, &Buffer[Offset], 16);
|
||||||
|
Offset += sprintf(&Buffer[Offset], "&Rev_");
|
||||||
//
|
|
||||||
// copy revision identifer
|
|
||||||
//
|
|
||||||
Offset += CopyField(InquiryData->Revision, &Buffer[Offset], 4);
|
Offset += CopyField(InquiryData->Revision, &Buffer[Offset], 4);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -374,14 +362,23 @@ USBSTOR_ConvertToUnicodeString(
|
||||||
ASSERT(ResultBufferLength);
|
ASSERT(ResultBufferLength);
|
||||||
ASSERT(ResultBufferLength > ResultBufferOffset);
|
ASSERT(ResultBufferLength > ResultBufferOffset);
|
||||||
|
|
||||||
DPRINT1("ResultBufferOffset %lu ResultBufferLength %lu Buffer %s Length %lu\n", ResultBufferOffset, ResultBufferLength, Buffer, strlen(Buffer));
|
DPRINT("ResultBufferOffset %lu ResultBufferLength %lu Buffer %s Length %lu\n", ResultBufferOffset, ResultBufferLength, Buffer, strlen(Buffer));
|
||||||
|
|
||||||
|
//
|
||||||
|
// construct destination string
|
||||||
|
//
|
||||||
DeviceString.Buffer = &ResultBuffer[ResultBufferOffset];
|
DeviceString.Buffer = &ResultBuffer[ResultBufferOffset];
|
||||||
DeviceString.Length = 0;
|
DeviceString.Length = 0;
|
||||||
DeviceString.MaximumLength = (ResultBufferLength - ResultBufferOffset) * sizeof(WCHAR);
|
DeviceString.MaximumLength = (ResultBufferLength - ResultBufferOffset) * sizeof(WCHAR);
|
||||||
|
|
||||||
|
//
|
||||||
|
// initialize source string
|
||||||
|
//
|
||||||
RtlInitAnsiString(&AnsiString, Buffer);
|
RtlInitAnsiString(&AnsiString, Buffer);
|
||||||
|
|
||||||
|
//
|
||||||
|
// convert to unicode
|
||||||
|
//
|
||||||
Status = RtlAnsiStringToUnicodeString(&DeviceString, &AnsiString, FALSE);
|
Status = RtlAnsiStringToUnicodeString(&DeviceString, &AnsiString, FALSE);
|
||||||
ASSERT(Status == STATUS_SUCCESS);
|
ASSERT(Status == STATUS_SUCCESS);
|
||||||
|
|
||||||
|
@ -406,15 +403,13 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
{
|
{
|
||||||
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
||||||
PFDO_DEVICE_EXTENSION FDODeviceExtension;
|
PFDO_DEVICE_EXTENSION FDODeviceExtension;
|
||||||
LPCWSTR GenericType;
|
LPCSTR GenericType, DeviceType;
|
||||||
LPWSTR Buffer;
|
LPWSTR Buffer;
|
||||||
CHAR Id1[50], Id2[50], Id3[50], Id4[50], Id5[50], Id6[50];
|
CHAR Id1[50], Id2[50], Id3[50], Id4[50], Id5[50], Id6[50];
|
||||||
ULONG Id1Length, Id2Length, Id3Length, Id4Length, Id5Length,Id6Length;
|
ULONG Id1Length, Id2Length, Id3Length, Id4Length, Id5Length,Id6Length;
|
||||||
ULONG Offset, TotalLength, Length;
|
ULONG Offset, TotalLength, Length;
|
||||||
PUFI_INQUIRY_RESPONSE InquiryData;
|
PUFI_INQUIRY_RESPONSE InquiryData;
|
||||||
|
|
||||||
DPRINT1("USBSTOR_PdoHandleQueryHardwareId\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get PDO device extension
|
// get PDO device extension
|
||||||
//
|
//
|
||||||
|
@ -437,9 +432,11 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get generic type
|
// get device type and generic type
|
||||||
//
|
//
|
||||||
|
DeviceType = USBSTOR_GetDeviceType(InquiryData);
|
||||||
GenericType = USBSTOR_GetGenericType(InquiryData);
|
GenericType = USBSTOR_GetGenericType(InquiryData);
|
||||||
|
|
||||||
ASSERT(GenericType);
|
ASSERT(GenericType);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -449,12 +446,12 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
RtlZeroMemory(Id1, sizeof(Id1));
|
RtlZeroMemory(Id1, sizeof(Id1));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id1[Offset], "USBSTOR\\");
|
Offset = sprintf(&Id1[Offset], "USBSTOR\\");
|
||||||
Offset += sprintf(&Id1[Offset], "Disk"); //FIXME
|
Offset += sprintf(&Id1[Offset], DeviceType);
|
||||||
Offset += CopyField(InquiryData->Vendor, &Id1[Offset], 8);
|
Offset += CopyField(InquiryData->Vendor, &Id1[Offset], 8);
|
||||||
Offset += CopyField(InquiryData->Product, &Id1[Offset], 16);
|
Offset += CopyField(InquiryData->Product, &Id1[Offset], 16);
|
||||||
Offset += CopyField(InquiryData->Revision, &Id1[Offset], 4);
|
Offset += CopyField(InquiryData->Revision, &Id1[Offset], 4);
|
||||||
Id1Length = strlen(Id1) + 1;
|
Id1Length = strlen(Id1) + 1;
|
||||||
DPRINT1("HardwareId1 %s\n", Id1);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId1 %s\n", Id1);
|
||||||
|
|
||||||
//
|
//
|
||||||
// generate id 2
|
// generate id 2
|
||||||
|
@ -463,11 +460,11 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
RtlZeroMemory(Id2, sizeof(Id2));
|
RtlZeroMemory(Id2, sizeof(Id2));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id2[Offset], "USBSTOR\\");
|
Offset = sprintf(&Id2[Offset], "USBSTOR\\");
|
||||||
Offset += sprintf(&Id2[Offset], "Disk"); //FIXME
|
Offset += sprintf(&Id2[Offset], DeviceType);
|
||||||
Offset += CopyField(InquiryData->Vendor, &Id2[Offset], 8);
|
Offset += CopyField(InquiryData->Vendor, &Id2[Offset], 8);
|
||||||
Offset += CopyField(InquiryData->Product, &Id2[Offset], 16);
|
Offset += CopyField(InquiryData->Product, &Id2[Offset], 16);
|
||||||
Id2Length = strlen(Id2) + 1;
|
Id2Length = strlen(Id2) + 1;
|
||||||
DPRINT1("HardwareId2 %s\n", Id2);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId2 %s\n", Id2);
|
||||||
|
|
||||||
//
|
//
|
||||||
// generate id 3
|
// generate id 3
|
||||||
|
@ -476,10 +473,10 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
RtlZeroMemory(Id3, sizeof(Id3));
|
RtlZeroMemory(Id3, sizeof(Id3));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id3[Offset], "USBSTOR\\");
|
Offset = sprintf(&Id3[Offset], "USBSTOR\\");
|
||||||
Offset += sprintf(&Id3[Offset], "Disk"); //FIXME
|
Offset += sprintf(&Id3[Offset], DeviceType);
|
||||||
Offset += CopyField(InquiryData->Vendor, &Id3[Offset], 8);
|
Offset += CopyField(InquiryData->Vendor, &Id3[Offset], 8);
|
||||||
Id3Length = strlen(Id3) + 1;
|
Id3Length = strlen(Id3) + 1;
|
||||||
DPRINT1("HardwareId3 %s\n", Id3);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId3 %s\n", Id3);
|
||||||
|
|
||||||
//
|
//
|
||||||
// generate id 4
|
// generate id 4
|
||||||
|
@ -488,12 +485,12 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
RtlZeroMemory(Id4, sizeof(Id4));
|
RtlZeroMemory(Id4, sizeof(Id4));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id4[Offset], "USBSTOR\\");
|
Offset = sprintf(&Id4[Offset], "USBSTOR\\");
|
||||||
Offset += sprintf(&Id4[Offset], "Disk"); //FIXME
|
Offset += sprintf(&Id4[Offset], DeviceType);
|
||||||
Offset += CopyField(InquiryData->Vendor, &Id4[Offset], 8);
|
Offset += CopyField(InquiryData->Vendor, &Id4[Offset], 8);
|
||||||
Offset += CopyField(InquiryData->Product, &Id4[Offset], 16);
|
Offset += CopyField(InquiryData->Product, &Id4[Offset], 16);
|
||||||
Offset += CopyField(InquiryData->Revision, &Id4[Offset], 1);
|
Offset += CopyField(InquiryData->Revision, &Id4[Offset], 1);
|
||||||
Id4Length = strlen(Id4) + 1;
|
Id4Length = strlen(Id4) + 1;
|
||||||
DPRINT1("HardwareId4 %s\n", Id4);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId4 %s\n", Id4);
|
||||||
|
|
||||||
//
|
//
|
||||||
// generate id 5
|
// generate id 5
|
||||||
|
@ -502,9 +499,9 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
RtlZeroMemory(Id5, sizeof(Id5));
|
RtlZeroMemory(Id5, sizeof(Id5));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id5[Offset], "USBSTOR\\");
|
Offset = sprintf(&Id5[Offset], "USBSTOR\\");
|
||||||
Offset += sprintf(&Id5[Offset], "GenDisk"); //FIXME
|
Offset += sprintf(&Id5[Offset], GenericType);
|
||||||
Id5Length = strlen(Id5) + 1;
|
Id5Length = strlen(Id5) + 1;
|
||||||
DPRINT1("HardwareId5 %s\n", Id5);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId5 %s\n", Id5);
|
||||||
|
|
||||||
//
|
//
|
||||||
// generate id 6
|
// generate id 6
|
||||||
|
@ -512,9 +509,9 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
//
|
//
|
||||||
RtlZeroMemory(Id6, sizeof(Id6));
|
RtlZeroMemory(Id6, sizeof(Id6));
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
Offset = sprintf(&Id6[Offset], "GenDisk"); //FIXME
|
Offset = sprintf(&Id6[Offset], GenericType);
|
||||||
Id6Length = strlen(Id6) + 1;
|
Id6Length = strlen(Id6) + 1;
|
||||||
DPRINT1("HardwareId6 %s\n", Id6);
|
DPRINT1("USBSTOR_PdoHandleQueryHardwareId HardwareId6 %s\n", Id6);
|
||||||
|
|
||||||
//
|
//
|
||||||
// compute total length
|
// compute total length
|
||||||
|
@ -547,7 +544,10 @@ USBSTOR_PdoHandleQueryHardwareId(
|
||||||
USBSTOR_ConvertToUnicodeString(Id5, Length, Offset, Buffer, &Offset);
|
USBSTOR_ConvertToUnicodeString(Id5, Length, Offset, Buffer, &Offset);
|
||||||
USBSTOR_ConvertToUnicodeString(Id6, Length, Offset, Buffer, &Offset);
|
USBSTOR_ConvertToUnicodeString(Id6, Length, Offset, Buffer, &Offset);
|
||||||
|
|
||||||
DPRINT1("Offset %lu Length %lu\n", Offset, Length);
|
//
|
||||||
|
// sanity check
|
||||||
|
//
|
||||||
|
ASSERT(Offset + 1 == Length);
|
||||||
|
|
||||||
//
|
//
|
||||||
// store result
|
// store result
|
||||||
|
@ -567,13 +567,11 @@ USBSTOR_PdoHandleQueryCompatibleId(
|
||||||
{
|
{
|
||||||
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
||||||
PFDO_DEVICE_EXTENSION FDODeviceExtension;
|
PFDO_DEVICE_EXTENSION FDODeviceExtension;
|
||||||
WCHAR Buffer[100];
|
CHAR Buffer[100];
|
||||||
ULONG Length;
|
ULONG Length, Offset;
|
||||||
LPWSTR InstanceId;
|
LPWSTR InstanceId;
|
||||||
LPCSTR DeviceType;
|
LPCSTR DeviceType;
|
||||||
|
|
||||||
DPRINT1("USBSTOR_PdoHandleQueryCompatibleId\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get PDO device extension
|
// get PDO device extension
|
||||||
//
|
//
|
||||||
|
@ -602,22 +600,8 @@ USBSTOR_PdoHandleQueryCompatibleId(
|
||||||
//
|
//
|
||||||
// format instance id
|
// format instance id
|
||||||
//
|
//
|
||||||
Length = swprintf(Buffer, L"USBSTOR\\%s", L"Disk") + 1;
|
Length = sprintf(Buffer, L"USBSTOR\\%s", DeviceType) + 1;
|
||||||
Length += swprintf(&Buffer[Length], L"USBSTOR\\%s", L"RAW") + 2;
|
Length += sprintf(&Buffer[Length], L"USBSTOR\\%s", L"RAW") + 2;
|
||||||
|
|
||||||
//
|
|
||||||
// verify this
|
|
||||||
//
|
|
||||||
// Length += swprintf(&Buffer[Length], L"USBSTOR\\RAW") + 1;
|
|
||||||
|
|
||||||
//Buffer[Length] = UNICODE_NULL;
|
|
||||||
//Buffer[Length+1] = UNICODE_NULL;
|
|
||||||
//Length++;
|
|
||||||
|
|
||||||
//
|
|
||||||
// calculate length
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// allocate instance id
|
// allocate instance id
|
||||||
|
@ -632,12 +616,10 @@ USBSTOR_PdoHandleQueryCompatibleId(
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
USBSTOR_ConvertToUnicodeString(Buffer, Length, 0, InstanceId, &Offset);
|
||||||
// copy instance id
|
USBSTOR_ConvertToUnicodeString(&Buffer[Offset], Length, Offset, InstanceId, &Offset);
|
||||||
//
|
|
||||||
wcscpy(InstanceId, Buffer);
|
|
||||||
|
|
||||||
DPRINT1("USBSTOR_PdoHandleQueryInstanceId %S\n", InstanceId);
|
DPRINT1("USBSTOR_PdoHandleQueryCompatibleId %S\n", InstanceId);
|
||||||
|
|
||||||
//
|
//
|
||||||
// store result
|
// store result
|
||||||
|
@ -656,32 +638,20 @@ USBSTOR_PdoHandleQueryInstanceId(
|
||||||
IN OUT PIRP Irp)
|
IN OUT PIRP Irp)
|
||||||
{
|
{
|
||||||
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
||||||
PFDO_DEVICE_EXTENSION FDODeviceExtension;
|
|
||||||
WCHAR Buffer[100];
|
WCHAR Buffer[100];
|
||||||
ULONG Length;
|
ULONG Length;
|
||||||
LPWSTR InstanceId;
|
LPWSTR InstanceId;
|
||||||
|
|
||||||
DPRINT1("USBSTOR_PdoHandleQueryInstanceId\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// get PDO device extension
|
// get PDO device extension
|
||||||
//
|
//
|
||||||
PDODeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
PDODeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
//
|
|
||||||
// get FDO device extension
|
|
||||||
//
|
|
||||||
FDODeviceExtension = (PFDO_DEVICE_EXTENSION)PDODeviceExtension->LowerDeviceObject->DeviceExtension;
|
|
||||||
|
|
||||||
//
|
|
||||||
// sanity check
|
|
||||||
//
|
|
||||||
ASSERT(FDODeviceExtension->DeviceDescriptor);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// format instance id
|
// format instance id
|
||||||
|
// FIXME: retrieve serial number from string device descriptor
|
||||||
//
|
//
|
||||||
swprintf(Buffer, L"USB\\VID_%04x&PID_%04x\\%s", FDODeviceExtension->DeviceDescriptor->idVendor, FDODeviceExtension->DeviceDescriptor->idProduct, L"09188212515A");
|
swprintf(Buffer, L"%s&%d", L"09188212515A", PDODeviceExtension->LUN);
|
||||||
|
|
||||||
//
|
//
|
||||||
// calculate length
|
// calculate length
|
||||||
|
@ -927,7 +897,7 @@ USBSTOR_CreatePDO(
|
||||||
//
|
//
|
||||||
// create child device object
|
// create child device object
|
||||||
//
|
//
|
||||||
Status = IoCreateDevice(DeviceObject->DriverObject, sizeof(PDO_DEVICE_EXTENSION), NULL, FILE_DEVICE_MASS_STORAGE, FILE_AUTOGENERATED_DEVICE_NAME, FALSE, &PDO);
|
Status = IoCreateDevice(DeviceObject->DriverObject, sizeof(PDO_DEVICE_EXTENSION), NULL, FILE_DEVICE_MASS_STORAGE, FILE_AUTOGENERATED_DEVICE_NAME | FILE_DEVICE_SECURE_OPEN, FALSE, &PDO);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue