⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guid设备接口的打开.txt

📁 驱动开发过程中要注意的一些要点以及一些基本资料
💻 TXT
字号:
1.使用walt oney的驱动程序生成向导生成驱动程序的框架.
2.新建一个MFC应用程序,并把应用向导生成的guids.h文件拷贝到应用程序所在的目录下,并在应用程序的工程中添加该文件到工程.
3.定义一个获得设备接口函数:
HANDLE GetDeviceViaInterface( GUID* pGuid, DWORD instance);
/////////////////////////////////////////////////////////////////////////////
//	GetDeviceViaInterface:	Open a handle via a device interface

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);
	if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
	{
		printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance\n");
		SetupDiDestroyDeviceInfoList(info);
		return NULL;
	}

	// 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, NULL);
	if( rv==INVALID_HANDLE_VALUE) rv = NULL;

	delete ifDetail;
	SetupDiDestroyDeviceInfoList(info);
	return rv;
}
4.包含头文件如下:
#include <windows.h>
#include <winioctl.h>
#include <setupapi.h>
#include "initguid.h"
#include "guids.h"
5.在工程->设置->link中的library/module中添加语句如下:
e:\ntddk\lib\i386\free\setupapi.lib
6.打开该设备接口:
	HANDLE hDevice = GetDeviceViaInterface((LPGUID)&GUID_INTERFACE_XRF_PCI,0);
	if(hDevice==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("can't open sys handle");
		return false;
	}
	AfxEnableControlContainer();
其中GUID_INTERFACE_XRF_PCI定义在guids.h文件中如下所示:
#ifndef GUIDS_H
#define GUIDS_H

// {E55A7CC8-16F7-4F38-A1DA-F581066EA1BE}
DEFINE_GUID(GUID_INTERFACE_XRF_PCI, 0xe55a7cc8L, 0x16f7, 0x4f38, 0xa1, 0xda, 0xf5, 0x81, 0x06, 0x6e, 0xa1, 0xbe);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -