如何不重启系统加载.SYS文件
首先,SYS的加载控制是在注册表里,START控制,你肯定已经知道了,我
就不多说了。
可以用控制面版DEVICE,这个你已经知道了,还可以用NET START XXX
和NET STOP XXX来启动和加载,这个你肯定也知道了。
用DEVICE和NET START的方法都必须先在注册表里填好,然后启动机器
然后NET START XXX,其实可以不用重启动机器的(动态加载的SYS)
在程序里加载的程序是这样的
BOOLEAN
StartPacketDriver( LPTSTR ServiceName )
{
BOOLEAN Status;
SC_HANDLE SCManagerHandle;
SC_HANDLE SCServiceHandle;
/* Open a handle to the SC Manager database. */
SCManagerHandle = OpenSCManager(
NULL, /* local machine */
NULL, /* ServicesActive database */
SC_MANAGER_ALL_ACCESS); /* full access rights */
if (SCManagerHandle==NULL) {
MessageBox(NULL,TEXT("Could not open SC"),NULL,MB_OK);
return FALSE;
} else {
SCServiceHandle=OpenService(SCManagerHandle,
ServiceName,
SERVICE_START
);
if (SCServiceHandle == NULL) {
MessageBox(NULL,TEXT("Could not open service"),NULL,MB_OK);
}
Status=StartService(
SCServiceHandle,
0,
NULL
);
if (!Status) {
if (GetLastError()==ERROR_SERVICE_ALREADY_RUNNING) {
return TRUE;
}
}
return Status;
}
return FALSE;
}
就这么简单.
就不多说了。
可以用控制面版DEVICE,这个你已经知道了,还可以用NET START XXX
和NET STOP XXX来启动和加载,这个你肯定也知道了。
用DEVICE和NET START的方法都必须先在注册表里填好,然后启动机器
然后NET START XXX,其实可以不用重启动机器的(动态加载的SYS)
在程序里加载的程序是这样的
BOOLEAN
StartPacketDriver( LPTSTR ServiceName )
{
BOOLEAN Status;
SC_HANDLE SCManagerHandle;
SC_HANDLE SCServiceHandle;
/* Open a handle to the SC Manager database. */
SCManagerHandle = OpenSCManager(
NULL, /* local machine */
NULL, /* ServicesActive database */
SC_MANAGER_ALL_ACCESS); /* full access rights */
if (SCManagerHandle==NULL) {
MessageBox(NULL,TEXT("Could not open SC"),NULL,MB_OK);
return FALSE;
} else {
SCServiceHandle=OpenService(SCManagerHandle,
ServiceName,
SERVICE_START
);
if (SCServiceHandle == NULL) {
MessageBox(NULL,TEXT("Could not open service"),NULL,MB_OK);
}
Status=StartService(
SCServiceHandle,
0,
NULL
);
if (!Status) {
if (GetLastError()==ERROR_SERVICE_ALREADY_RUNNING) {
return TRUE;
}
}
return Status;
}
return FALSE;
}
就这么简单.
我最擅长从零开始创造世界,所以从来不怕失败,它最多也就让我一无所有。