IO_API PDRIVER_INFO PMC_API io_load_driver(PCVENDOR_KEY v, PCDEVTYPE_KEY t) { DRIVER_LIST::iterator it; DRIVER_INFO driver; string infofile; ZeroMemory(&driver, sizeof(DRIVER_INFO)); infofile = get_exe_dir(); infofile += "infs/"; infofile += (char*)CVendorName(*v); infofile += ".inf"; GetPrivateProfileString( (char*)CDevTypeName(*t), "module", "", driver.dllname, sizeof(driver.dllname), infofile.data() ); for(it = g_Drivers.begin(); it != g_Drivers.end(); it++){ if( !strnicmp(it->dllname, driver.dllname, sizeof(it->dllname)) ){ return &(*it); } } driver.vendor.key = *v; driver.type.key = *t; GetPrivateProfileString( "oem", "vendor", "", driver.vendor.description, sizeof(driver.vendor.description), infofile.data() ); GetPrivateProfileString( (char*)CDevTypeName(*t), "description", "", driver.type.description, sizeof(driver.type.description), infofile.data() ); if(_load_module(driver)){ if(driver.load){ driver.load(&driver); } } it = g_Drivers.insert(g_Drivers.end(), driver); if(it == g_Drivers.end()){ io_unload_driver(&driver); return 0; } return &(*it); }
static int reload(void) { return _load_module(1); }
static int load_module(void) { return _load_module(0); }