Untitled
unknown
plain_text
5 months ago
2.1 kB
22
Indexable
__forceinline uint32_t IsStorageDevicePropertyValid(HANDLE Device) { STORAGE_PROPERTY_QUERY Query; Query.PropertyId = StorageDeviceProperty; Query.QueryType = PropertyStandardQuery; STORAGE_DESCRIPTOR_HEADER Header = { 0 }; DWORD ReturnedBytes = 0; if (!DeviceIoControl(Device, IOCTL_STORAGE_QUERY_PROPERTY, &Query, sizeof(STORAGE_PROPERTY_QUERY), &Header, sizeof(STORAGE_DESCRIPTOR_HEADER), &ReturnedBytes, NULL)) { return 2; } if (Header.Size == 0) { return 2; } BYTE *Descriptor = (BYTE *)malloc(Header.Size); if (!Descriptor) { return 2; } ZeroMemory(Descriptor, Header.Size); if (!DeviceIoControl(Device, IOCTL_STORAGE_QUERY_PROPERTY, &Query, sizeof(STORAGE_PROPERTY_QUERY), Descriptor, Header.Size, &ReturnedBytes, NULL)) { return 2; } STORAGE_DEVICE_DESCRIPTOR *Desc = (STORAGE_DEVICE_DESCRIPTOR *)Descriptor; if (Desc->Size < sizeof(STORAGE_DEVICE_DESCRIPTOR)) { free(Descriptor); return 2; } uint32_t bValid = 1; if (!Desc->RemovableMedia && (Desc->BusType == BusTypeSata)) { if ((Desc->VendorIdOffset < Desc->Size) && (Desc->ProductIdOffset < Desc->Size) && (Desc->SerialNumberOffset < Desc->Size)) { if (((!*(uint8_t *)Descriptor + Desc->VendorIdOffset) || !Desc->VendorIdOffset) && (!*(uint8_t *)(Descriptor + Desc->ProductIdOffset) || !Desc->ProductIdOffset) && (!*(uint8_t *)(Descriptor + Desc->SerialNumberOffset) || !Desc->SerialNumberOffset)) { bValid = 0; } } } free(Descriptor); return bValid; }
Editor is loading...
Leave a Comment