刚才编译了一下kmdkit里的那个beeper的例子
一时兴起改了一下代码,
结果扬声器响个不停。电脑也死机了
这倒是小事,麻烦的是当我想再次编译beeper那个例子,用kmdkit提供的加载程序加载生成的
beeper.sys时,提示说不能注册驱动。
为了找到错误号,用VC依样画葫芦写了个加载程序
-----------------------------------------------------------------------------------
#include "stdafx.h"
#include <windows.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
SC_HANDLE schSCManager;
TCHAR szPath[MAX_PATH];
TCHAR* szPath2;
cout<<"请输入驱动路径"<<endl;
cin>>szPath;
SC_HANDLE schService;
schSCManager = OpenSCManager(
NULL,
NULL,
SC_MANAGER_ALL_ACCESS);
if (NULL == schSCManager) {
cout<<"打开OpenSCManager错误"<<endl;
}else{
cout<<"打开OpenSCManager成功"<<endl;
}
if( !GetFullPathName( szPath, sizeof(szPath),szPath,&szPath2) )
{
cout<<"打开驱动文件错误"<<GetLastError()<<endl;
return FALSE;
}else{
cout<<"打开驱动文件"<<szPath<<endl;
}
schService = CreateService(
schSCManager, // SCManager database
TEXT("Sample_Srv"), // name of service
"hello", // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_DEMAND_START, // start type
SERVICE_ERROR_NORMAL, // error control type
szPath, // path to service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
if (schService == NULL)
{
cout<<"注册驱动错误"<<endl<<GetLastError()<<endl;
cout<<ERROR_SERVICE_EXISTS<<endl;
return FALSE;
}
else
{
StartService(schService,0,NULL);
DeleteService(schService);
CloseServiceHandle(schService);
return TRUE;
}
CloseServiceHandle(schSCManager);
return 0;
}
----------------------------------------------------------------------------------
错误号是找到了1073,查查MSDN对应的是ERROR_SERVICE_EXISTS
怎么办呢。
是服务没有卸载的缘故吗
各位大虾帮帮忙啊
ok,问题解决了一半,还是要靠自己来!!!
换了一台机子,用控制台下的程序,显示能够加载,但是不发出声音。
又写了一个win32的
--------------------------------------------------------------------------------
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE hSCManager,hService;
char addr[264];
char* s;
hSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_CREATE_SERVICE);
if(hSCManager==NULL){
MessageBox(NULL,"open scm error","error",0);
}else{
GetFullPathName("beeper.sys",sizeof(addr),addr,&s);
MessageBox(NULL,addr,"path",0);
hService=CreateService(hSCManager,"beeper","Nice Melody Beeper",
SERVICE_START + DELETE, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,addr, NULL, NULL, NULL, NULL, NULL);
if(hService==NULL){
MessageBox(NULL,"CreateService error","error",0);
}else{
if(StartService(hService,0,NULL)){
MessageBox(NULL,"StartService error","error",0);
}
DeleteService(hService);
CloseServiceHandle(hService);
}
}
return 0;
}
-----------------------------------------------------------------------------------
都差不多,都是把人家原来的汇编例子改在VC里做,但是这个加载驱动后,beeper.sys能够正常运行,是扬声器发声,唉,暂时就到这里吧,其他的事慢慢思考。
另外SCM似乎有个数据库,所以不能加载相同的例子。
楼下的那位仁兄,不是你说的问题。只怪我随便乱打字,不说了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课