社区
Windows SDK/API
帖子详情
如何获得硬件设备的句柄
faiqi
2003-10-30 10:26:02
比如一块PCI卡,如何获得其设备句柄 ,谢谢!
...全文
388
9
打赏
收藏
如何获得硬件设备的句柄
比如一块PCI卡,如何获得其设备句柄 ,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jiangchun_xn
2003-11-11
打赏
举报
回复
learning
yayowd
2003-11-11
打赏
举报
回复
不懂!
781014
2003-11-08
打赏
举报
回复
学习
Atomictry
2003-11-04
打赏
举报
回复
学习。
hongliqiu
2003-10-31
打赏
举报
回复
学习~
Yuehj
2003-10-31
打赏
举报
回复
例如:
//打开一个设备
HANDLE hDevice = CreateFile("\\\\.\\PYCommPort0",GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL
);
if(hDevice==INVALID_HANDLE_VALUE)return E_FAIL;
//与设备进行通讯
if(!DeviceIoControl(hDevice,PYCOMM_IOCTL_SETDATABITS,&comDataBits,sizeof(comDataBits),NULL,
0,&Status, NULL))
Yuehj
2003-10-31
打赏
举报
回复
首先要知道设备的符号连接(针对winnt环境)或设备ID(针对WDM驱动程序,WDM驱动程序有的也是使用符号连接)然后通过CreateFile函数打开设备,或使用DeviceIOControl直接与设备进行通讯。
sczyq
2003-10-31
打赏
举报
回复
//----------------------------------------------------
typedef struct NetCardStruct
{
DWORD Id; // 这就是你需要的设备句柄
AnsiString Name;
bool Enabled;
bool Changed;
bool IsDisable;
bool InitState;
} TNetCardStruct;
typedef TNetCardStruct* PNetCardStruct;
//---------------------------------------------------------------------------
void __fastcall EnumNetCards(TList *NetDeviceList)
{
AnsiString DevValue;
PNetCardStruct NetCard;
LPTSTR Buffer = NULL;
DWORD BufSize = 0;
HDEVINFO hDevInfo = 0;
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT|DIGCF_ALLCLASSES)))
return;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
for (DWORD DeviceId=0;
SetupDiEnumDeviceInfo(hDevInfo,DeviceId,&DeviceInfoData); DeviceId++)
{
DevValue.SetLength(0);
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS , &Buffer, (PULONG)&BufSize))
DevValue = Buffer;
if (DevValue == "Net") // 判断设备是网卡
{
DevValue.SetLength(0);
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_ENUMERATOR_NAME , &Buffer, (PULONG)&BufSize))
DevValue = Buffer;
if (DevValue != "ROOT") // 判断设备不是虚拟设备
{
NetCard = new TNetCardStruct;
NetCard->Id = DeviceId;
NetCard->Name = "<Unknown Device>";
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER , &Buffer, (PULONG)&BufSize))
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC , &Buffer, (PULONG)&BufSize))
NetCard->Name = Buffer;
NetCard->Changed = false;
NetCard->IsDisable = false;
NetCard->Enabled = GetNetCardState(DeviceInfoData.DevInst) == gdsEnabled;
NetCard->InitState = NetCard->Enabled;
NetDeviceList->Add(NetCard);
}
}
}
}
//---------------------------------------------------------------------------
bool __fastcall GetRegistryProperty(HDEVINFO DeviceInfoSet,
PSP_DEVINFO_DATA DeviceInfoData, ULONG Property, PVOID Buffer, PULONG Length)
{
while (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
DeviceInfoData, Property, NULL, (BYTE *)*(TCHAR **)Buffer, *Length, Length))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (*(LPTSTR *)Buffer) LocalFree(*(LPTSTR *)Buffer);
*(LPTSTR *)Buffer = (PCHAR)LocalAlloc(LPTR,*Length);
}
else return false;
}
return (*(LPTSTR *)Buffer)[0];
}
sfemil
2003-10-30
打赏
举报
回复
你可以使用NetBios或者winsock等直接进行网络编程。你只要句柄干什么?
WINDOWS下鼠标移动
获得
句柄
(
句柄
id+html颜色值).zip
鼠标移动
获得
句柄
工具,可以
获得
光标停留所在控件
句柄
id,html颜色值等
获得
当前
句柄
获得
当前
句柄
MFC
句柄
截屏
MFC利用
句柄
后台截屏,目前只支持diretx,不支持opengl
遍历所有
硬件
信息VS2008工程
遍历所有
硬件
信息VS2008工程 遍历所有
硬件
信息VS2008工程 遍历所有
硬件
信息VS2008工程
HID
设备
遍历
delphi 遍历本机HID
设备
并显示。代码在winXP下编译通过
Windows SDK/API
1,222
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章