阅读:1322回复:0
window98 驱动安装出现蓝屏!请高手帮忙解决!
在windows98下面制作制动安装驱动程序的setup.exe,程序已经弄完,但是当系统制动创建驱动信息库的时候,计算机出现蓝屏(0E),我的硬件是usbtocomm , 除了sys文件 还有vxd设备文件,怀疑是inf文件出现错误,但是手动安装可以!现在不知道是怎么回事,请大家帮助!谢谢!
//#include <Windows.h> #include <WinError.h> #include \"stdafx.h\" //#include <String.h> #define _FAR_MODE #ifdef _FAR_MODE #define _FAR far #else #define _FAR #endif DRIVER_NODE _FAR drv_node; #define INST_SUCCESSFULLY_MSG \"Device driver has been successfully installed!\" #define INST_SUCCESSFULLY_TITLE \"Setup complete!\" #define MAX_PATH 256 #define IS_OK(x) (!(x)) #define NOT_OK(x) (x) #define ERROR_UNKNOWN 0xFFFF /* #define STOP_AND_QUIT() { \\ dwLastErr = GetLastError(); \\ ShowErrorMessage(); \\ return dwLastErr; \\ } */ #define STOP_AND_QUIT(lable) \\ ShowErrorMessage(); \\ goto lable; #define STOP_AND_RET(x) \\ ShowErrorMessage(); \\ return x #define ShowErrorMessage() \\ MessageBox( \\ NULL, \\ \"Errors have occured during installation. The installation can\'t continue.\", \\ \"Fatal Error!\", \\ MB_OK|MB_SYSTEMMODAL \\ ) //////////////////////// Function protypes //////////////////////////////////// RETERR InitInstallEnv( LPDRIVER_NODE lpDrvNode, char far * lpInfFile ); /////////////////////////////////////////////////////////////////////////////// ATOM atDeviceDriverPath; ATOM atServiceDriverPath; RETERR InstallDeviceDriver( char far * lpInfFile, char far * lpHwID ) { /////////////////////////////////////////////////////////////////////////////// #define SIZEOF_CLASSNAME 0x20 /////////////////////////////////////////////////////////////////////////////// LPDEVICE_INFO lpdi, lpDevInfo; HKEY hDevKey; RETERR wRetErr; //DWORD lRetErr; LPDRIVER_NODE lpDrvNode; char cArrayBuffer[MAX_PATH]; char cArrayClassName[SIZEOF_CLASSNAME]; ////////////////////// Initialize local variables ///////////////////////////// lpdi = NULL; hDevKey = NULL; ////////////////////////////////////////////////////////////////////////////// //GetWindowsDirectory(cArrayBuffer, MAX_PATH); //lstrcat(cArrayBuffer, \"\\\\inf\\\\\"); //lstrcat(cArrayBuffer, lpInfFile); // GetCurrentDirectory(MAX_PATH, cArrayBuffer); // lstrcat(cArrayBuffer, \"\\\\\"); strcpy(cArrayBuffer, \"d:\\\\setup\\\\serwpl.inf\"); // lstrcat(cArrayBuffer, lpInfFile); // MessageBox(NULL , cArrayBuffer, \"info\", MB_OK); // add by jew wRetErr = DiGetINFClass( cArrayBuffer, INFTYPE_TEXT, cArrayClassName, SIZEOF_CLASSNAME ); /////////////////// Detect if the device has been installed /////////////////////// wRetErr = DiGetClassDevs( &lpdi, cArrayClassName, NULL, DIGCF_PRESENT ); if( NOT_OK(wRetErr)) { return wRetErr; } for(lpDevInfo=lpdi, wRetErr=ERROR_SUCCESS; lpDevInfo; lpDevInfo=lpDevInfo->lpNextDi) { wRetErr = DiBuildClassDrvList(lpDevInfo); if( NOT_OK(wRetErr)) { break; } lpDrvNode = lpDevInfo->lpClassDrvList; if( !lpDrvNode ) { wRetErr = ERROR_UNKNOWN; break; } if( lstrcmpi(lpDrvNode->lpszHardwareID, lpHwID) == 0 ) { wRetErr = ERROR_SUCCESS; goto lb_QUIT; } } DiDestroyDeviceInfoList(lpdi); if( NOT_OK(wRetErr)) { return wRetErr; } /////////////////// END //////////////////// wRetErr = DiCreateDeviceInfo( &lpdi, NULL, 0, NULL, NULL, cArrayClassName, NULL ); if( NOT_OK(wRetErr) ) { STOP_AND_RET(wRetErr); } // GetCurrentDirectory(MAX_PATH, cArrayBuffer); strcpy(cArrayBuffer, \"d:\\\\setup\\\\\"); MessageBox(NULL , cArrayBuffer, \"info\", MB_OK); // add by jew // lstrcat(cArrayBuffer, \"\\\\\"); lpdi->atDriverPath = atDeviceDriverPath = GlobalAddAtom(cArrayBuffer); wRetErr = DiBuildClassDrvList(lpdi); if( !lpdi->lpClassDrvList ) { STOP_AND_QUIT(lb_QUIT); } lpDrvNode = lpdi->lpClassDrvList; wRetErr = ERROR_UNKNOWN; for(; lpDrvNode; lpDrvNode=lpDrvNode->lpNextDN) { MessageBox(NULL , lpDrvNode->lpszHardwareID, \"info\", MB_OK); // add by jew if( lstrcmpi(lpDrvNode->lpszHardwareID, lpHwID) == 0) { wRetErr = DiCreateDeviceInfo( &lpDevInfo, NULL, 0, NULL, NULL, cArrayClassName, NULL ); char xxx[10]; _itoa(wRetErr, xxx, 10); MessageBox(NULL , xxx, \"info\", MB_OK); // add by jew if( IS_OK(wRetErr) ) { lpDevInfo->lpCompatDrvList = lpDevInfo->lpSelectedDriver = lpDrvNode; lpDevInfo->atDriverPath = atDeviceDriverPath; //lpDevInfo->Flags |= 0x0000000F; MessageBox(NULL , \"Driver is Installing... Please Insert Hardware_Device!\", \"info\", MB_OK); // add by jew //在程序执行到下面安装的一步的时候,程序将出现蓝屏 wRetErr = DiCallClassInstaller( DIF_INSTALLDEVICE, lpDevInfo ); DiDestroyDeviceInfoList(lpdi); // unsigned char code[]={0xea,0x0,0x0,0xff,0xff}; // ( *(void(far *)())code )(); //启动计算机 } break; } } // MessageBox(NULL , \"Delete Hardware device _USB_BIRD!\", \"info\", MB_OK); // add by jew // DiDestroyDeviceInfoList(lpDevInfo); lb_QUIT: DiDestroyDeviceInfoList(lpdi); return wRetErr; } int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int cmdShow ) { if (hPrevInstance) { return 1; } //SetupDeviceDriver1(T2_INF_FILE, HW_ID); //InstallService(\"Device.inf\", \"*WCO0301\"); InstallDeviceDriver(\"D:\\\\setup\\\\Serwpl.inf\", \"USB\\\\VID_067B&PID_2303\"); //InstallService(\"T2ISDN.INF\", \"T2_VIRTUAL_ISDN\"); return 0; } |
|
|