I tested the ioctl function when don’t work :
HANDLE fkdd3=CreateFile(“\\.\Volume{cd4c8bfd-9061-e06a-550e-916f0206fb8f}”,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
int err=GetLastError();
if (fkdd3!=INVALID_HANDLE_VALUE)
{
BOOL b;
DWORD dt;
STORAGE_HOTPLUG_INFO _hotplugInfo={0};
b=DeviceIoControl(fkdd3,IOCTL_STORAGE_GET_HOTPLUG_INFO,NULL,0,&_hotplugInfo,sizeof(_hotplugInfo),&dt,NULL);
VOLUME_GET_GPT_ATTRIBUTES_INFORMATION _tvgpt={0};
b=DeviceIoControl(fkdd3,IOCTL_VOLUME_GET_GPT_ATTRIBUTES,NULL,0,&_tvgpt,sizeof(_tvgpt),&dt,NULL);
DISK_GEOMETRY _DISK_GEOMETRY={0};
b=DeviceIoControl(fkdd3,IOCTL_DISK_GET_DRIVE_GEOMETRY,NULL,0,&_DISK_GEOMETRY,sizeof(_DISK_GEOMETRY),&dt,NULL);
MOUNTDEV_NAME name;
//printf(“sizeof %d”,sizeof (MOUNTDEV_NAME));
b=DeviceIoControl(fkdd3,IOCTL_MOUNTDEV_QUERY_DEVICE_NAME,NULL,0,&name,sizeof (MOUNTDEV_NAME),&dt,NULL);
name.Name[name.NameLength>>1]=0;
CloseHandle(fkdd3);
}
It’s good for function IOCTL tested , and i don’t understand why the IRP_MN_MOUNT_VOLUME is not called when i usb stoage disk usb connected.