大概的方法是:在HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\下建立你的设备的一个主键,名字和你的sys文件名相同(去掉扩展名)。在加上Type、start、ErrorControl、Group等键值。然后再把你的sys文件copy到system32目录下,重启机器系统会自动加载。或者编写一个安装程序写那几个注册表项,然后调用CreateService函数,这样不用重启也可。以后系统重启时系统也会自动加载。 
///////////////////////////////////// 
直接修改注册表,也可以! 
还不会在系统设备管理里面看到设备,对于那些对异物敏感的客户可能有效,呵呵! \Registry\Machine\System\CurrentControlSet\Services\ABCDEFG 
Type = REG_DWORD 0x00000001 
Start = REG_DWORD 0x00000002 
DisplayName = "myfilename" 
ErrorControl = REG_DWORD 0x0000001 这样就可以,自己写吧,只要把sys拷贝到 system32/drivers/即可 
重新启动,哈哈,不是就ok了吗? 我已经照做了,可还是不行,请高手帮帮我啊!!
这个SYS是人家提供给我的,用他提供的安装程序安装后是可以正确使用的,但是我现在用它进行开发后,想将它和我的应用程序一起做成一个安装包,但就是装不上去。以上注册表项是它的安装程序建立的,另外还有一项,但是我用REGEDIT既不能删除,也不能导入。其值为: 
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_abcd] 
"NextInstance"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_DLPORTIO\0000] 
"Service"="abcd" 
"Legacy"=dword:00000001 
"ConfigFlags"=dword:00000000 
"Class"="LegacyDriver" 
"ClassGUID"="{8ECC055D-047F-11D1-A537-0000F8753ED1}" 
"DeviceDesc"="abcd I/O Driver" 
"Capabilities"=dword:00000000 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_DLPORTIO\0000\Control] 
"DeviceReference"=dword:81888430 
"ActiveService"="abcd" 不知此项对其加载有无影响,又是如何建立的?

解决方案 »

  1.   

    但好象你没有按照上面的方法做,不知是何驱动包,可否让我一试,我的mail:[email protected]
      

  2.   

    不用改注册表,用CreateService函数就可以加入了
      

  3.   

    #include <windows.h> 
    #include <winsvc.h> 
    #include <conio.h>
    #include <iostream.h> void ErrorHandler(char * s,DWORD err)
    {
    cout << s << endl;
    cout << "Error number:" << err << endl;
        ExitProcess(err);
    }int main(int argc, char* argv[]) 

       SC_HANDLE hServiceMgr, hServiceNpf;  
       DWORD dwRtn;
       
       if (argc!=4)
       {
       cout << "Usage:\n";
       cout << " install service_name \
    service_label executable\n";
       cout << "       service_name is the \
    name used internally by the SCM\n";
           cout << "       service_label is the \
    name that appears in the Services applet\n";
       cout << "       (for multiple \
    words,put them in double quotes)\n";
       cout << "       executable is the \
    full path to the EXE \n";
       cout << endl;
       return 0;
       }   cout << "Starting ...\n";   //open a connection to the SCM
     
       hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); 
       if(hServiceMgr==NULL)  
         ErrorHandler("In OpenSCManager",GetLastError()); 
       else 
         cout << "OpenSCManager() ok !" << endl;  
       
       //Install the new service   hServiceNpf = CreateService( 
         hServiceMgr, argv[1], //eg "NPF" 
         argv[2],              //eg "Netgroup Packet Filter" 
         SERVICE_ALL_ACCESS,   // 加载驱动程序的访问权限 
         SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序 
         2,                    // 注册表驱动程序的 Start 值 
         1,                    // 注册表驱动程序的 ErrorControl 值 
         argv[3],              // 注册表驱动程序的 ImagePath 值 
         NULL, NULL, NULL, NULL, NULL);      if( hServiceNpf==NULL ) 
     { 
           dwRtn = GetLastError(); 
           if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS ) 
       { 
            CloseServiceHandle( hServiceMgr ); 
            ErrorHandler("In CreateService",GetLastError()); 
       } 
           else 
       { 
            cout << "CrateService() Faild Service is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS! " << endl; 
       }        // 驱动程序已经加载,只需要打开 
           hServiceNpf = OpenService( hServiceMgr, argv[1], SERVICE_ALL_ACCESS ); 
           if( hServiceNpf==NULL ) 
       {  
            CloseServiceHandle( hServiceMgr ); 
            ErrorHandler("In OpenService", GetLastError()); 
       } 
           else 
       { 
            cout << "OpenService() ok ! " << endl; 
       } 
     } 
         else 
     { 
          cout << "CrateService() ok ! " << endl; 
     }  
         return 0; 

      

  4.   

    #include <windows.h>
    #include <iostream.h>void ErrorHandler (char * s,DWORD err)
    {
    cout << s << endl;
    cout << "Error number: " << err << endl;
    ExitProcess(err);
    }void main (int argc , char * argv[])
    {
    SC_HANDLE service,scm;
    BOOL success;
    SERVICE_STATUS status;
    if (argc!=2)
    {
    cout << "Usage:\n";
    cout << "      remove service_name\n";
    return;
    }
    cout << "Starting ...\n";
    //Open a connection to the SCM
    scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
    if(scm==NULL)
          ErrorHandler("In OpenSCManager",GetLastError());
    //Get the service's handle
    service=OpenService(scm,argv[1],SERVICE_ALL_ACCESS|DELETE);
    if (service==NULL)
      ErrorHandler("In OpenService",GetLastError());
    //Stop the service if necessary
    success=QueryServiceStatus(service,&status);
    if (!success)
          ErrorHandler("In QueryServiceStatus",GetLastError());
    if (status.dwCurrentState!=SERVICE_STOPPED)
    {
    cout << "Stopping service ...\n";
    success=ControlService(service,SERVICE_CONTROL_STOP,&status);
    if (!success)
              ErrorHandler("In ControlService",GetLastError());
    Sleep(500);
    }
    //Remove the service
    success=DeleteService(service);
    if(success)
      cout << "Service removed\n";
    else
          ErrorHandler("In DeleteService",GetLastError());
        //Clean up
    CloseServiceHandle(service);
    CloseServiceHandle(scm);
    cout << "Ending ...\n";
    }