CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

C#访问驱动程序中,关于设备枚举的问题,请高手指教?

楼主lh29(冷雪)2003-04-01 22:37:13 在 .NET技术 / C# 提问

在设备枚举的过程中,需要调用SetupDiEnumDeviceInterfaces()  
  和SetupDiGetClassDevs()两个WIN32的API函数,但在这两个  
  函数的参数中,有相当于VC++中的GUID类型的硬件标识符变量,  
  我定义结构如下:  
  [StructLayout(LayoutKind.Sequential)]    
  public   struct   GUID  
  {  
    public   long   Data1;  
    public   short   Data2;  
    public   short   Data3;  
    public   byte[]   Data4;  
    }  
  在应用过程中,  
                    m_Guid=new   GUID();  
                    m_Guid.Data1=0x77f49320;  
  m_Guid.Data2=0x16ef;  
  m_Guid.Data3=0x11d2;  
                    m_Guid.Data4=new   byte[8]  
                                  {0xad,0x51,0x00,0x60,0x97,0xb5,0x14,0xdd};  
  数据传送正确,但在程序调用以上两函数时,系统提示“无法封送  
  类型GUID的字段Data4:该类型无法作为结构字段进行封送处理”。  
  请问数组类型的Data4如何初始化,或该结构如何定义,谢谢指教。 问题点数:0、回复次数:7Top

1 楼rqxiang(翔子)回复于 2003-04-01 23:23:44 得分 0

gzTop

2 楼saucer(思归)回复于 2003-04-01 23:45:19 得分 0

have   you   tried   to   use   System.Guid   structure   instead?Top

3 楼Knight94(愚翁)回复于 2003-04-02 08:57:38 得分 0

.net直接有GUID类型Top

4 楼lh29(冷雪)回复于 2003-04-03 09:31:42 得分 0

谢谢楼上的各位朋友,我现在已经可以传递GUID了,不过设备枚举一直不成功,不知道哪位有经验的兄弟指点一二。高分相送。Top

5 楼Knight94(愚翁)回复于 2003-04-04 17:07:51 得分 0

给大家看看你的代码Top

6 楼lh29(冷雪)回复于 2003-04-04 18:22:04 得分 0

//定义常量  
  private System.Guid   m_Guid=new   Guid(0x77f49320,0x16ef,0x11d2,0xad,0x51,0x00,0x60,0x97,0xb5,0x14,0xdd);  
  const   uint   DIGCF_PRESENT   =   0x00000002;  
  const   uint   DIGCF_INTERFACEDEVICE   =   0x00000010;  
  const   int   ERROR_NO_MORE_ITEMS   =259;  
  private   const   int   INVALID_HANDLE_VALUE=-1;  
  private   const   int   NULL=0;  
  //定义参数结构  
  [StructLayout(LayoutKind.Sequential)]    
  public   struct     SP_DEVICE_INTERFACE_DATA  
  {    
  public   ulong   cbSize;  
  public   System.Guid   InterfaceClassGuid;  
  public   ulong   Flags;  
  public   ulong   Reserved;  
  }  
  //定义导入Dll的函数  
  [DllImport("setupapi.DLL",   SetLastError=true)]    
  public   static   extern   unsafe   int   SetupDiGetClassDevs(ref   System.Guid   ClassGuid,  
  int   Enumerator,//ref   string   Enumerator,    
  long       hwndParent,   //HWND  
  long     Flags   );  
  [DllImport("setupapi.DLL",   SetLastError=true)]  
  public   static   extern   unsafe   long   SetupDiEnumDeviceInterfaces(  
    int   DeviceInfoSet,  
    int   DeviceInfoData,  
                   ref   System.Guid   interfaceClassGuid,  
                            ulong   MemberIndex,  
    ref   SP_DEVICE_INTERFACE_DATA   DeviceInterfaceData);  
  //程序的调用API函数部分程序  
                          .............  
  hardwareDeviceInfo   =   SetupDiGetClassDevs   (  
  ref   pGuid,  
  NULL,   //   Define   no   enumerator   (global)  
  NULL,   //   Define   no  
  (DIGCF_PRESENT   |   //   Only   Devices   present  
  DIGCF_INTERFACEDEVICE));   //   Function   class   devices.  
   
  deviceInfoData=new   SP_DEVICE_INTERFACE_DATA();  
  deviceInfoData.cbSize=(ulong)Marshal.SizeOf(deviceInfoData);  
   
  while   (!done)    
  {  
                    *UsbDevices=new   USB_DEVICE_DESCRIPTOR();  
  for   (;   i   <   NumberDevices;   i++)  
  {  
  long   count=SetupDiEnumDeviceInterfaces(   hardwareDeviceInfo,  
  0,          
                                          ref   pGuid,  
  i,  
  ref   deviceInfoData);  
                        ..................  
            }  
       ...................  
  请问编程过程中有哪些需要特别注意的问题?谢谢各位!Top

7 楼lh29(冷雪)回复于 2003-04-04 18:25:28 得分 0

另外,上面代码中hardwareDeviceInfo应定义成什么类型的变量。我认为可能跟程序的正确性有关,我现在定义成int.Top

相关问题

  • 怎么在驱动程序里访问显卡的驱动?
  • 关于用beans访问数据库--驱动程序问题
  • c/c++能对直接编写硬件的驱动程序吗?
  • 驱动程序
  • 驱动程序
  • c++图形模式下的SVAG驱动程序
  • 应该装什么驱动程序 雅马哈 734-c
  • Delphi中能不能像C那样写驱动程序?
  • 如何在设备驱动程序里访问物理内存呢?
  • 应用程序如何通过流接口驱动访问硬件?

关键词

  • 函数
  • 结构
  • dll
  • guid
  • 定义
  • 设备枚
  • 类型
  • ulong
  • ref
  • const

得分解答快速导航

  • 帖主:lh29

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo