自動安裝解除安裝驅動程式的原始碼

2021-09-30 06:05:22 字數 4345 閱讀 5834

我本來希望我是往硬體底層驅動程式發展的,本來專業就是電路方面的,這兩年也做過usb驅動的一些東西,雖然能用,但是心裡一直感覺不舒服,對wdm的掌握總感覺有點飄忽,所以假期中在看unix的作業系統實現,現在心裡有點底了,可是沒有真的寫過徹底的驅動程式,總有點心虛,貼個帖子,以前bbs上的,自己也寫過,也不知道到**了,所以直接把人家的貼上來好了,

#include "stdafx.h"

#include // make all functions unicode safe.

#include // for the api updatedriverforplugandplaydevices().

#include // for setupdi*** functions.

#include "install.h"

int displayerror(tchar * errorname)

bool findexistingdevice(in lptstr hardwareid)

//_tprintf(text("search for device id: [%s]/n"),hardwareid); //

//  enumerate through all devices.

//found = false;

deviceinfodata.cbsize = sizeof(sp_devinfo_data);

for (i=0;setupdienumdeviceinfo(deviceinfoset,i,&deviceinfodata);i++)

else if (getlasterror() == error_insufficient_buffer)

else}

if (getlasterror() == error_invalid_data)

continue; //

// compare each entry in the buffer multi-sz list with our hardwareid. //

for (p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(tchar)) }

if (buffer) localfree(buffer);

if (found) break;}

if (getlasterror() != no_error) //

//  cleanup.

//cleanup_deviceinfo:

err = getlasterror();

setupdidestroydeviceinfolist(deviceinfoset);

setlasterror(err);

return err == no_error; //???}

bool

installrootenumerateddriver(in  lptstr hardwareid,

in  lptstr inffile,

out pbool  rebootrequired  optional)

//// create the container for the to-be-created device information element. //

deviceinfoset = setupdicreatedeviceinfolist(&classguid,0);

if(deviceinfoset == invalid_handle_value) //

// now create the element.

// use the class guid and name from the inf file.

= sizeof(sp_devinfo_data);

if (!setupdicreatedeviceinfo(deviceinfoset,

classname,

&classguid,

null,

0,dicd_generate_id,

&deviceinfodata)) //

// add the hardwareid to the device's hardwareid property.

//if(!setupdisetdeviceregistryproperty(deviceinfoset,

&deviceinfodata,

spdrp_hardwareid,

(lpbyte)hardwareid,

(lstrlen(hardwareid)+1+1)*sizeof(tchar))) //

// transform the registry element into an actual devnode

// in the pnp hw tree.

//if (!setupdicallclassinstaller(dif_registerdevice,

deviceinfoset,

&deviceinfodata)) //

// the element is now registered. we must explicitly remove the

// device using dif_remove, if we encounter any failure from now on.//

//// install the driver.

//if (!updatedriverforplugandplaydevices(0,

hardwareid,

inffile,

installflag_force,

rebootrequired))

setlasterror(err);}

////  cleanup.

//cleanup_deviceinfo:

err = getlasterror();

setupdidestroydeviceinfolist(deviceinfoset);

setlasterror(err);

return err == no_error;}

int installdriver(_tchar *infname, _tchar *hardwareid) //

// look to see if this device allready exists.

//if (findexistingdevice(hwid))

}else //

// driver does not exist, create and call the api.

// hardwareid must be a multi-sz string, which ar**[2] is.

//if (!installrootenumerateddriver(hwid, // hardwareid

fname, // filename

&rebootrequired))}

//_tprintf(text("driver installed successfully./n"));

if (rebootrequired)

return 0; // install success, no reboot required.}

int removedriver(_tchar *hardwareid) //

//  enumerate through all devices.

= sizeof(sp_devinfo_data);

for (i=0;setupdienumdeviceinfo(deviceinfoset,i,&deviceinfodata);i++)

else if (getlasterror() == error_insufficient_buffer)

else}

if (getlasterror() == error_invalid_data)

continue; //

// compare each entry in the buffer multi-sz list with our hardwareid. //

for (p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(tchar))

break;}}

if (buffer) localfree(buffer);}

if ((getlasterror()!=no_error)&&(getlasterror()!=error_no_more_items)) //

//  cleanup.

//cleanup_deviceinfo:

err = getlasterror();

setupdidestroydeviceinfolist(deviceinfoset);

return err;}

自動安裝解除安裝驅動程式的原始碼

include stdafx.h include make all functions unicode safe.include for the api updatedriverforplugandplaydevices include for setupdi functions.include i...

自動安裝解除安裝驅動程式的原始碼

我本來希望我是往硬體底層驅動程式發展的,本來專業就是電路方面的,這兩年也做過usb驅動的一些東西,雖然能用,但是心裡一直感覺不舒服,對wdm的掌握總感覺有點飄忽,所以假期中在看unix的作業系統實現,現在心裡有點底了,可是沒有真的寫過徹底的驅動程式,總有點心虛,貼個帖子,以前bbs上的,自己也寫過,...

轉貼 自動安裝解除安裝驅動程式的原始碼

轉貼 自動安裝解除安裝驅動程式的原始碼 include stdafx.h include make all functions unicode safe.include for the api updatedriverforplugandplaydevices include for setupdi...