4012|3

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WDM驱动程序如何手动安装 [复制链接]

本人写了一个WDM驱动,它本身不与硬件打交道,只是起到与两个驱动程序通信的功能。
现在.sys,.inf文件都已写完,如何手动安装和启动呢?
请各位高手指点一二,多谢!!!

最新回复

谢谢大家的关注,此问题解决。 可以手动注册、启动驱动,手动停止、卸载驱动。 所用程序如下: void startdriver() {         LPTSTR     DependOnServices = TEXT("Rtx_HalExt\000Rtx_rtss\000RtxServer\000Rtss_010\000\000");     SC_HANDLE  schService = NULL;     DWORD      err;         CString           str1;         char       *DriverName = "Mediate" ;                char       *ServiceExe = "%SYSTEMROOT%\\system32\\drivers\\Mediate.sys";         BOOL       ret;     SchSCManager = NULL;         //Establish a connection to the service control manager     SchSCManager = OpenSCManagerA (NULL,                 // machine (NULL == local)                                   NULL,                 // database (NULL == default)                                   SC_MANAGER_ALL_ACCESS // access required                                   );         if(SchSCManager != NULL)         {                 SetDlgItemText(IDC_STATIC2, "打开schSCManager句柄成功");         }         else         {                 SetDlgItemText(IDC_STATIC2, "打开schSCManager句柄失败");                 return;         }         // Create a service object and add it to default service control         // manager database     schService = CreateService (SchSCManager,          // SCManager database                                 DriverName,            // name of service                                 DriverName,            // name to display                                 SERVICE_ALL_ACCESS,    // desired access                                 SERVICE_KERNEL_DRIVER, // service type                                 SERVICE_DEMAND_START,  // start type                                 SERVICE_ERROR_NORMAL,  // error control type                                 ServiceExe, // service's binary                                 NULL,                  // no load ordering group                                 NULL,                  // no tag identifier                                 DependOnServices,      // no dependencies                                 NULL,                  // LocalSystem account                                 NULL                   // no password                                 );     if (schService == NULL)     {         err = GetLastError();         if (err == ERROR_SERVICE_EXISTS)         {                         SetDlgItemText(IDC_STATIC2, "failure: CreateService, ERROR_SERVICE_EXISTS\n");                                }         else         {                 str1.Format("%d", err);                         SetDlgItemText(IDC_STATIC2, "failure: CreateService (0x"+str1+")" );                            return;         }     }     else     {                         SetDlgItemText(IDC_STATIC2, "CreateService SUCCESS!");     }     CloseServiceHandle (schService);             schService = OpenService (SchSCManager,                               DriverName,                               SERVICE_ALL_ACCESS                               );     if (schService == NULL)     {         err=GetLastError();                 str1.Format("%d", err);                 SetDlgItemText(IDC_STATIC2, "failure: OpenService (0x"+str1+")" );                     return ;     }                /////Start a service     ret = StartService (schService,    // service identifier                         0,             // number of arguments                         NULL           // pointer to arguments                         );     if (ret)     {         SetDlgItemText(IDC_STATIC2,"StartService SUCCESS\n");     }     else     {         err = GetLastError();         if (err == ERROR_SERVICE_ALREADY_RUNNING)         {                 str1.Format("%d", err);                         SetDlgItemText(IDC_STATIC2, "failure: StartService, ERROR_SERVICE_ALREADY_RUNNING\n");         }         else         {                 str1.Format("%d", err);                         SetDlgItemText(IDC_STATIC2, "failure: StartService (0x"+str1+")" );                     }     }         CloseServiceHandle (schService); } void deletedriver() {     SC_HANDLE       schService;     BOOL            ret;     SERVICE_STATUS  serviceStatus;         CString                        str1;         DWORD                        err;         char *DriverName = "Mediate";     schService = OpenService (SchSCManager,                               DriverName,                               SERVICE_ALL_ACCESS                               );     if (schService == NULL)     {         err=GetLastError();                 str1.Format("%d", err);                 SetDlgItemText(IDC_STATIC2, "failure: OpenService (0x"+str1+")" );         return ;     }         ///Control Stop     ret = ControlService (schService,                           SERVICE_CONTROL_STOP,                           &serviceStatus                           );     if (ret)     {                  SetDlgItemText(IDC_STATIC2, "ControlService stop SUCCESS\n");            }     else     {          err=GetLastError();                  str1.Format("%d", err);                  SetDlgItemText(IDC_STATIC2, "failure: ControlService stop(0x"+str1+")" );                  return;     }         ///Delete Service     ret = DeleteService (schService);     if (ret)     {                 SetDlgItemText(IDC_STATIC2, "DeleteService SUCCESS!\n");                 SchSCManager = NULL;     }     else     {         err=GetLastError();                 str1.Format("%d", err);                 SetDlgItemText(IDC_STATIC2, "failure: DeleteService (0x"+str1+")" );     }     ret = CloseServiceHandle (schService); }  详情 回复 发表于 2008-3-5 08:52
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
先把.inf拷贝到C:\WINDOWS\inf,.sys拷贝C:\WINDOWS\system32\drivers下,插上硬件,就会有提示的,然后就可以按提示进行安装了.
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
非常谢谢你的回答。
但我现在的问题是,我编的驱动程序不是对应某个硬件的,所以不会有硬件插入而显示安装提示。
我想知道如果是这种情况下如何让它安装呢
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢大家的关注,此问题解决。
可以手动注册、启动驱动,手动停止、卸载驱动。
所用程序如下:
void startdriver()
{
        LPTSTR     DependOnServices = TEXT("Rtx_HalExt\000Rtx_rtss\000RtxServer\000Rtss_010\000\000");
    SC_HANDLE  schService = NULL;
    DWORD      err;
        CString           str1;
        char       *DriverName = "Mediate" ;       
        char       *ServiceExe = "%SYSTEMROOT%\\system32\\drivers\\Mediate.sys";
        BOOL       ret;
    SchSCManager = NULL;

        //Establish a connection to the service control manager
    SchSCManager = OpenSCManagerA (NULL,                 // machine (NULL == local)
                                  NULL,                 // database (NULL == default)
                                  SC_MANAGER_ALL_ACCESS // access required
                                  );
        if(SchSCManager != NULL)
        {
                SetDlgItemText(IDC_STATIC2, "打开schSCManager句柄成功");
        }
        else
        {
                SetDlgItemText(IDC_STATIC2, "打开schSCManager句柄失败");
                return;
        }

        // Create a service object and add it to default service control
        // manager database
    schService = CreateService (SchSCManager,          // SCManager database
                                DriverName,            // name of service
                                DriverName,            // name to display
                                SERVICE_ALL_ACCESS,    // desired access
                                SERVICE_KERNEL_DRIVER, // service type
                                SERVICE_DEMAND_START,  // start type
                                SERVICE_ERROR_NORMAL,  // error control type
                                ServiceExe, // service's binary
                                NULL,                  // no load ordering group
                                NULL,                  // no tag identifier
                                DependOnServices,      // no dependencies
                                NULL,                  // LocalSystem account
                                NULL                   // no password
                                );

    if (schService == NULL)
    {
        err = GetLastError();

        if (err == ERROR_SERVICE_EXISTS)
        {
                        SetDlgItemText(IDC_STATIC2, "failure: CreateService, ERROR_SERVICE_EXISTS\n");                       
        }
        else
        {
                str1.Format("%d", err);
                        SetDlgItemText(IDC_STATIC2, "failure: CreateService (0x"+str1+")" );   
                        return;
        }

    }
    else
    {
                        SetDlgItemText(IDC_STATIC2, "CreateService SUCCESS!");
    }

    CloseServiceHandle (schService);
       
    schService = OpenService (SchSCManager,
                              DriverName,
                              SERVICE_ALL_ACCESS
                              );

    if (schService == NULL)
    {
        err=GetLastError();
                str1.Format("%d", err);
                SetDlgItemText(IDC_STATIC2, "failure: OpenService (0x"+str1+")" );            
        return ;
    }       
        /////Start a service
    ret = StartService (schService,    // service identifier
                        0,             // number of arguments
                        NULL           // pointer to arguments
                        );
    if (ret)
    {
        SetDlgItemText(IDC_STATIC2,"StartService SUCCESS\n");
    }
    else
    {
        err = GetLastError();

        if (err == ERROR_SERVICE_ALREADY_RUNNING)
        {
                str1.Format("%d", err);
                        SetDlgItemText(IDC_STATIC2, "failure: StartService, ERROR_SERVICE_ALREADY_RUNNING\n");
        }
        else
        {
                str1.Format("%d", err);
                        SetDlgItemText(IDC_STATIC2, "failure: StartService (0x"+str1+")" );            
        }

    }
        CloseServiceHandle (schService);
}

void deletedriver()
{
    SC_HANDLE       schService;
    BOOL            ret;
    SERVICE_STATUS  serviceStatus;
        CString                        str1;
        DWORD                        err;
        char *DriverName = "Mediate";

    schService = OpenService (SchSCManager,
                              DriverName,
                              SERVICE_ALL_ACCESS
                              );

    if (schService == NULL)
    {
        err=GetLastError();
                str1.Format("%d", err);
                SetDlgItemText(IDC_STATIC2, "failure: OpenService (0x"+str1+")" );
        return ;
    }
        ///Control Stop
    ret = ControlService (schService,
                          SERVICE_CONTROL_STOP,
                          &serviceStatus
                          );
    if (ret)
    {
                 SetDlgItemText(IDC_STATIC2, "ControlService stop SUCCESS\n");       
    }
    else
    {
         err=GetLastError();
                 str1.Format("%d", err);
                 SetDlgItemText(IDC_STATIC2, "failure: ControlService stop(0x"+str1+")" );
                 return;
    }

        ///Delete Service
    ret = DeleteService (schService);

    if (ret)
    {
                SetDlgItemText(IDC_STATIC2, "DeleteService SUCCESS!\n");
                SchSCManager = NULL;
    }
    else
    {
        err=GetLastError();
                str1.Format("%d", err);
                SetDlgItemText(IDC_STATIC2, "failure: DeleteService (0x"+str1+")" );
    }
    ret = CloseServiceHandle (schService);
}
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表