Cómo identificar el disco duro móvil

  

Hace mucho tiempo que no se escribe, pegue el código, celebre el Día de Mayo.

Método del anillo 3:
Los niños deberían haber descubierto que la función GetDriveType solo puede reconocer el disco U y no puede reconocer el disco duro móvil. Los discos duros extraíbles y locales devolverán el mismo tipo DRIVE_FIXED. El consejo en MSDN es identificar el dispositivo USB con una función llamada SetupDiGetDeviceRegistryProperty.

De hecho, hay una manera más conveniente de identificar el dispositivo USB consultando el tipo de bus a través de la función DeviceIoControl. Código postal:

 BOOL IsUsbDriver (TCHAR tchDrvName) 
/* ++ Descripción de rutina: Determina si una partición es un dispositivo USB. Argumentos: tchDrvName - Parámetros de entrada, letra de unidad. Valor devuelto: devuelve VERDADERO si es un dispositivo USB; de lo contrario, devuelve FALSO,
La consulta también devuelve FALSO. Autor:
Fypher
http://hi.baidu.com/nmn714
05/01/2011 - * /{

TCHAR tcsDrvName [8] = TEXTO ( "\\\\ . \\\\ \\\\ X: ");
tcsDrvName [4] = tchDrvName; HANDLE hDevice = CreateFile (tcsDrvName,
GENERIC_READ,
FILE_SHARE_READ |  FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
), si (hDevice == INVALID_HANDLE_VALUE) {
devuelven FALSE;
}
STORAGE_PROPERTY_QUERY StoragePropertyQuery;
StoragePropertyQuery.PropertyId = StorageDeviceProperty;
StoragePropertyQuery.QueryType = PropertyStandardQuery;
BYTE buff [1024] = {0};
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR) ante;
pDevDesc- > Tamaño = sizeof (piel de ante);
DWord dwOutLen; res
BOOL = DeviceIoControl (hDevice,
IOCTL_STORAGE_QUERY_PROPERTY,
&StoragePropertyQuery,
sizeof (STORAGE_PROPERTY_QUERY),
pDevDesc, España pDevDesc- > Tamaño,
&dwOutLen,
NULL
);
CloseHandle (hDevice), si (res) {
//resultado de retorno vuelven pDevDesc- >
; BusType == BusTypeUsb;
} else {
//Consulta fallida
return F ALSE;
}
}

método en el anillo 0:

en el anillo 0, se puede determinar por su nombre DiskDeviceObject sobre una cierta probabilidad si el dispositivo de volumen DiskDeviceObject correspondiente es un dispositivo USB . Es decir, el objeto DiskDeviceObject llamado HardDiskVolumeXXX suele ser un disco duro local. Sin embargo, este método es en realidad muy poco confiable, especialmente en Win7, la inserción de un disco U es HardDiskVolumeXXX.

De hecho, la mejor manera es consultar el tipo de bus. Código de Pasta:

 BOOLEANA IsUsbDriver (EN PDEVICE_OBJECT pDeviceObject) 
/* ++ rutina Descripción: determinar si un dispositivo de disco es un dispositivo USB. Argumentos: pDeviceObject: parámetro de entrada, DiskDeviceObject correspondiente al dispositivo de volumen. La relación entre el dispositivo y el volumen DiskDeviceObject
puede referirse a:
http://hi.baidu.com/nmn714/blog/item/3d2ccccad529e994c8176842.HtmlReturn Valor: dispositivo USB devuelve TRUE, de lo contrario devuelve FALSE, < BR> La consulta fallida también devuelve FALSE. Autor:
Fypher
http://hi.baidu.com/nmn714
05/01/2011 - * /{

PIRP pNewIrp;
PSTORAGE_DEVICE_DESCRIPTOR pStorageDeviceDescriptor;
STORAGE_PROPERTY_QUERY StoragePropertyQuery;
&Bot. WaitEvent, NotificationEvent, FALSE); pNewIrp = IoBuildDeviceIoControlRequest (IOCTL_STORAGE_QUERY_PROPERTY,
), Francia FALSO,
&WaitEvent,
&IoStatus
);!
si (pNewIrp) {
Crear IRP no
//devolver FALSE;
}
Estado = IoCallDriver (pDeviceObject, pNewIrp);
si (== Estado STATUS_PENDING) {
Estado = KeWaitForSingleObject (&WaitEvent, Execut ive, KernelMode, FALSO, NULL);
Estado = IoStatus.Status; (! NT_SUCCESS (Estado)
} if) {//
consulta falló
volver FALSO;
} = pStorageDeviceDescriptor (PSTORAGE_DEVICE_DESCRIPTOR) ante; //resultado retorno
volver pStorageDeviceDescriptor- > BusType == BusTypeUsb;
}
Copyright © Conocimiento de Windows All Rights Reserved