Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
static int reload(void)
{
	return _load_module(1);
}
Exemplo n.º 3
0
static int load_module(void)
{
	return _load_module(0);
}