win32 文件过滤驱动中如何获得硬盘的大小
Hi,各位大侠,
我最近遇到一个比较头痛的问题,我在一个文件驱动中在设备加载的时候想获得硬盘的大小
我往下传IOCTL_DISK_GET_DRIVE_GEOMETRY_EX控制命令,成功了,但是返回值都是0,大家有什么好的解决方法不?
我最近遇到一个比较头痛的问题,我在一个文件驱动中在设备加载的时候想获得硬盘的大小
我往下传IOCTL_DISK_GET_DRIVE_GEOMETRY_EX控制命令,成功了,但是返回值都是0,大家有什么好的解决方法不?
NTSTATUS GetDiskGeometry(IN PDEVICE_OBJECT pDiskDevObj,
OUT LARGE_INTEGER * pDiskSize)
{
IO_STATUS_BLOCK IoStatusBlock;
KEVENT Event;
PIRP pIrp;
NTSTATUS status;
DISK_GEOMETRY_EX diskGeo;
PDISK_GEOMETRY_EX diskGeometry;
ULONG size ;
/* allocate memory
*/
size = sizeof (DISK_GEOMETRY_EX);
diskGeometry =&diskGeo;
RtlZeroMemory(diskGeometry, sizeof(DISK_GEOMETRY_EX));
KeInitializeEvent(&Event, NotificationEvent, FALSE);
while(true)
{
/* Request for the device geometry
*/
pIrp = IoBuildDeviceIoControlRequest (IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
pDiskDevObj,
NULL,
0,
(PVOID)diskGeometry,
size,
FALSE,
&Event,
&IoStatusBlock);
if (!pIrp)
{
//return STATUS_INSUFFICIENT_RESOURCES;
KeResetEvent(&Event);
break;
}
status = IoCallDriver(pDiskDevObj, pIrp);
if (status == STATUS_PENDING)
{
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
status = IoStatusBlock.Status;
}
if (NT_SUCCESS(status))
{
pDiskSize->QuadPart = diskGeometry->DiskSize.QuadPart;
if(pDiskSize->QuadPart!=0)
{
return status;
}
}
break;
}
pIrp = IoBuildDeviceIoControlRequest(
IOCTL_DISK_GET_DRIVE_GEOMETRY,
pDiskDevObj,
NULL,
0,
&diskGeometry->Geometry,
sizeof(DISK_GEOMETRY),
FALSE,
&Event,
&IoStatusBlock);
if (!pIrp)
{
return STATUS_INSUFFICIENT_RESOURCES;
}
status = IoCallDriver(pDiskDevObj, pIrp);
if (status == STATUS_PENDING)
{
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
status = IoStatusBlock.Status;
}
if (NT_SUCCESS(status))
{
pDiskSize->QuadPart = diskGeometry->Geometry.Cylinders.QuadPart*diskGeometry->Geometry.SectorsPerTrack*diskGeometry->Geometry.TracksPerCylinder;
}
return status;
}
...全文
相关推荐
WMI-Win32_DiskDrive 硬盘参数
Win32_Disk
C#利用win32 Api 修改本地系统时间、获取硬盘序列号
获取硬盘序列号获取硬盘序列号则需要用到另一个Win32 API函数`GetVolumeInformation`。这个函数可以提供关于指定驱动器的各种信息,包括硬盘序列号。
获得硬盘id
moc = mc.GetInstances(); // 获取所有硬盘驱动器实例 // 遍历所有硬盘驱动器实例 foreach (ManagementObject mo in moc) { hdId
C#4种方式获取硬盘物理序列号
通过实例化`StorageDevice`对象,然后调用其`Id`属性,可以获得硬盘的唯一标识,其中包括物理序列号。这种方法简单且跨平台,但可能不适用于所有Windows版本。
DELLR610服务器,U盘加载硬盘控制卡驱动 安装windows server2003
**准备U盘**:选择一个至少8GB大小的U盘,使用专用工具如Rufus或Win32 Disk Imager将其格式化为FAT32文件系统。


驱动开发/核心开发
