大家谁用过 IOCTL_STORAGE_GET_DEVICE_NUMBER呀?我这显示未定义?

playfilemaker 2009-04-20 05:51:49
下面的程序实现了从当前盘符映射到物理硬盘的磁盘
//得到盘符以后,使用DeviceIoControl函数,操作码是IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
//会得到一个VOLUME_DISK_EXTENTS结构信息。这个结构里的DISK_EXTENT结构有一个变量DiskNumber,
//用来表明该盘符所在的disk,0表示物理盘0,1表示物理盘1依次类推

const int IOCTL_STORAGE_GET_DEVICE_NUMBER = 0x2D1080;
int GetDeviceNumber(string DevicePath)
{
int ans = -1;

IntPtr h = CreateFile(DevicePath.TrimEnd('\\'), 0, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
if (h.ToInt32() != INVALID_HANDLE_VALUE)
{
int requiredSize;
STORAGE_DEVICE_NUMBER Sdn = new STORAGE_DEVICE_NUMBER();
int nBytes = Marshal.SizeOf(Sdn);
IntPtr ptrSdn = Marshal.AllocHGlobal(nBytes);

if(DeviceIoControl(h, IOCTL_STORAGE_GET_DEVICE_NUMBER, IntPtr.Zero,0,ptrSdn,nBytes,out requiredSize,IntPtr.Zero))
{
Sdn = (STORAGE_DEVICE_NUMBER)Marshal.PtrToStructure(ptrSdn, typeof(STORAGE_DEVICE_NUMBER));
// just my way of combining the relevant parts of the
// STORAGE_DEVICE_NUMBER into a single number
ans = (Sdn.DeviceType << 8) + Sdn.DeviceNumber;
}
Marshal.FreeHGlobal(ptrSdn);
CloseHandle(h);
}
return ans;
}
}

编译后报错,提示"IOCTL_STORAGE_GET_DEVICE_NUMBER"未定义
错误 CS0103: 当前上下文中不存在名称“IOCTL_STORAGE_GET_DEVICE_NUMBER”

加上定义后,又报错了
const int IOCTL_STORAGE_GET_DEVICE_NUMBER = 0x2D1080;

错误 CS1502: 与“ConsoleApplication3.GetDevicesNumber.DeviceIoControl(System.IntPtr, uint, System.IntPtr, uint, ref ConsoleApplication3.GetDevicesNumber.GetVersionOutParams, uint, ref uint, System.IntPtr)”最匹配的重载方法具有一些无效参数
错误 CS1503: 参数“5”: 无法从“System.IntPtr”转换为“ref ConsoleApplication3.GetDevicesNumber.GetVersionOutParams”
错误 CS1503: 参数“6”: 无法从“int”转换为“uint”
错误 CS1503: 参数“7”: 无法从“out int”转换为“ref uint”
...全文
375 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bikong7 2011-07-27
  • 打赏
  • 举报
回复
草,为什么不说,是怎么解决的。
playfilemaker 2009-04-21
  • 打赏
  • 举报
回复
解决了.谢谢大家
playfilemaker 2009-04-21
  • 打赏
  • 举报
回复
我定义了呀

const int IOCTL_STORAGE_GET_DEVICE_NUMBER = 0x2D1080;
zsuswy 2009-04-20
  • 打赏
  • 举报
回复
这个问题怎么发在aps.net区?

肯定是IOCTL_STORAGE_GET_DEVICE_NUMBER这个常量所在的文件没有被你引用进来。查一下IOCTL_STORAGE_GET_DEVICE_NUMBER在什么地方定义的就可以了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧