阅读:1423回复:0
请教虚拟设备驱动安装程序的头文件问题
用如下代码做虚拟设备的安装程序需要哪些头文件?
我用的头文件中有 #include <windows.h> #include <setupapi.h> #include <stdio.h> #include <newdev.h> #include <regstr.h> #include <initguid.h> #include <devguid.h> 但是编译时报错:错误是 d:\ntddk\inc\windows.h(196) : fatal error C1083: Cannot open include file: 'winefs.h': No such file or directory Error executing cl.exe. 请问是什么原因,各位大虾谢谢了:) /************************************************************** * * 名称:InstallWDMDriver * 功能:安装WDM驱动 * 参数:HardwareId: 字符串描述的完整的设备ID * INFFile: Inf安装文件 * RebootRequired: 是否需要重启的标志 * 返回:成功返回TRUE,失败返回FALSE * ****************************************************************/ //EXTERN_C BOOL WINAPI extern "C" BOOL APIENTRY EXPORT InstallWDMDriver( LPCTSTR HardwareId, LPCTSTR INFFile) { HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE; SP_DEVINFO_DATA DeviceInfoData; GUID ClassGUID; TCHAR ClassName[64]; BOOL reboot = FALSE; //AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 首先从Inf文件中得到设备类GUID if (!SetupDiGetINFClass((LPTSTR)INFFile,&ClassGUID,ClassName,sizeof(ClassName),0)) { printf( "Get INF Class GUID failed\n" ); return FALSE; } DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0); if(DeviceInfoSet == INVALID_HANDLE_VALUE) { printf( "Create DeviceInfoSet failed\n" ); return FALSE; } // 打开该设备所属的类 DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); if (!SetupDiCreateDeviceInfo(DeviceInfoSet, ClassName, &ClassGUID, NULL, 0, DICD_GENERATE_ID, &DeviceInfoData)) { printf( "CreateDeviceInfo failed\n" ); SetupDiDestroyDeviceInfoList(DeviceInfoSet); return FALSE; } // 添加该设备 if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)HardwareId, (lstrlen(HardwareId)+1+1)*sizeof(TCHAR))) { printf( "Add DeviceRegistryProperty failed\n" ); //SetupDiDestroyDeviceInfoList(DeviceInfoSet); //return FALSE; } // 建立关联 if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, DeviceInfoSet, &DeviceInfoData)) { printf( "CallClassInstaller(REGISTERDEVICE)\n" ); return FALSE; } // 关联信息都已建立,安装本驱动(以前相当于建立了一个未知的设备) if (!UpdateDriverForPlugAndPlayDevices(0, HardwareId, INFFile, INSTALLFLAG_FORCE, &reboot)) { // 安装失败,需要把以前的创建的信息删除,否则将会留下一个未知设备 DWORD err = GetLastError(); printf( "UpdateDriverForPlugAndPlayDevices failed\n" ); printf( "the errcode is 0x%x\n", err ); if (!SetupDiCallClassInstaller( DIF_REMOVE, DeviceInfoSet, &DeviceInfoData)) { printf( "CallClassInstaller(REMOVE) failed\n" ); } } SetupDiDestroyDeviceInfoList(DeviceInfoSet); return TRUE; } |
|