EricGaoxp
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1322回复:0

window98 驱动安装出现蓝屏!请高手帮忙解决!

楼主#
更多 发布于:2003-09-15 16:41
在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;
}
从头再来!越过一路风景,无悔!
游客

返回顶部