社区
Windows SDK/API
帖子详情
如何获得硬件设备的句柄
faiqi
2003-10-30 10:26:02
比如一块PCI卡,如何获得其设备句柄 ,谢谢!
...全文
367
9
打赏
收藏
如何获得硬件设备的句柄
比如一块PCI卡,如何获得其设备句柄 ,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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等直接进行网络编程。你只要句柄干什么?
VC++实现USB通信
调用SetupDiGetClassDevs函数用来
获得
一类
硬件
设备
的信息: HDEVINFO hDevInfo = SetupDiGetClassDevs( &guidHID,//这类
设备
配置或接口类GUID NULL,//特定的字符串,用来选择符合条件的
设备
0,//与
获得
信息相关的...
获取
设备
句柄
的两种方法
=============《Windows 程序设计 第五版》读书笔记 || 第四章 输出文字 ============= 获取
设备
句柄
的两种方法 所谓
设备
句柄
,说得通俗一点儿就是要操作的对象,比如一个窗口
句柄
,一个按钮的
句柄
。先说说这两种...
什么是
句柄
和文件描述符
句柄
就是一个标识符,只要
获得
对象的
句柄
,我们就可以对对象进行任意的操作。
句柄
不是指针,操作系统用
句柄
可以找到一块内存,这个
句柄
可能是标识符,map的key,也可能是指针,看操作系统怎么处理的了。fd算是在...
05-跨进程
句柄
和进程间操作
剖析:一个进程,它所打开的
句柄
(或者说它所
获得
的
句柄
),进程都会把
句柄
存起来,这样就会形成一个表记录进程拿到哪些
句柄
;这个表叫做
句柄
表;在B进程的
句柄
表中,并没有自己的进程的
句柄
,所以就算手动把A进程的...
Linux系统
句柄
问题分析----linux系统文件删除后,空间却不释放原因分析
句柄
就是一个对象的标识符,只要
获得
对象的
句柄
,我们就可以对对象进行任意的操作,包括窗口,按钮,图标,输出
设备
,控件或者文件等;
句柄
是一种特殊的智能指针,用一个唯一的整数值标识一个对象(即编号),并不...
Windows SDK/API
1,221
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章