阅读:1558回复:7
请教:如何根据GUID得到一个符号连接?
使用什么函数?
|
|
最新喜欢:![]()
|
沙发#
发布于:2002-03-16 13:47
驱动中使用:
NTSTATUS IoRegisterDeviceInterface( IN PDEVICE_OBJECT PhysicalDeviceObject, IN CONST GUID *InterfaceClassGuid, IN PUNICODE_STRING ReferenceString OPTIONAL, OUT PUNICODE_STRING SymbolicLinkName ); 应用程序中: 标准的调用方法(见Chris Cant的WDM1TEST) HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance) { // Get handle to relevant device information set HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); if(info==INVALID_HANDLE_VALUE) { printf(\"No HDEVINFO available for this GUID\\n\"); return NULL; } // Get interface data for the requested instance SP_INTERFACE_DEVICE_DATA ifdata; ifdata.cbSize = sizeof(ifdata); while(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) { if(GetLastError()==ERROR_NO_MORE_ITEMS) { printf(\"No SP_INTERFACE_DEVICE_DATA available for this GUID instance\\n\"); SetupDiDestroyDeviceInfoList(info); return NULL; } else { instance++; } } // Get size of symbolic link name DWORD ReqLen; SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL); PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); if( ifDetail==NULL) { SetupDiDestroyDeviceInfoList(info); return NULL; } // Get symbolic link name ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL)) { SetupDiDestroyDeviceInfoList(info); delete ifDetail; return NULL; } printf(\"Symbolic link is %s\\n\",ifDetail->DevicePath); // Open file HANDLE rv = CreateFile( ifDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if( rv==INVALID_HANDLE_VALUE) rv = NULL; delete ifDetail; SetupDiDestroyDeviceInfoList(info); return rv; } |
|
|
板凳#
发布于:2002-03-16 14:32
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2002-03-16 14:45
您所说的例子程序我看过了,不过那个程序是基于控制台的应用程序,当我写一个WIN32程序调用其中的函数时(比如SetupDiGetClassDevs),编译时出错,错误提示:error LNK2001: unresolved external symbol __imp__SetupDiGetClassDevsA@16
请问什么原因? |
|
|
地下室#
发布于:2002-03-16 15:02
这是基本的道理啊,你要加上头文件setupapi.h,还有库文件,在project\\setting\\link\\object/lib中加入setupapi.lib(setupapi.lib在98ddk中)。
看来你对VC很不熟哦。 :( |
|
|
5楼#
发布于:2002-03-16 15:05
例子程序是DOS提示符下的应用程序,我在WIN32下使用例子提供的函数(打开设备),编译会出错,头文件有了(setupapi.h),怎么回事啊?
|
|
|
6楼#
发布于:2002-03-16 15:15
用户被禁言,该主题自动屏蔽! |
|
7楼#
发布于:2002-03-16 15:20
问题解决了,多谢二位的热情回答。
|
|
|