首页
社区
课程
招聘
求助]error code:1072 ERROR_SERVICE_MARKED_FOR_DELETE
发表于: 2009-7-1 11:17 14014

求助]error code:1072 ERROR_SERVICE_MARKED_FOR_DELETE

2009-7-1 11:17
14014
我在卸载驱动的时候,每次都是返回这个错误:ERROR_SERVICE_MARKED_FOR_DELETE(1072),但是我在用INSTDRV.exe and monitor.exe卸载的时候都是可以成功的,所以可以判断不是我驱动的问题,下面是我加载和卸载驱动的代码,哪位大侠指点指点
非常感谢

这是运行下面的代码后,再用monitor.exe卸载时给出的提示:
Monitor        ERROR (1072): The driver's service database entry is already marked for deletion.

=====================================================
#include <Windows.h>
#include <stdio.h>
#include "Global.h"
#include <string.h>

#pragma warning( disable : 4996 )

#define BUFFER_SIZE 4096
SC_HANDLE HSCManager = NULL;

#define servicePath TEXT("C:\\WINDOWS\\system32\\drivers\\MonDisk.sys")

BOOL
InstallMyService( )
{
  DWORD  errorCode;
  SERVICE_STATUS_PROCESS    serviceInfo;
  DWORD            bytesNeeded;
  SC_HANDLE Hservice = NULL;

  HSCManager = OpenSCManager(
    NULL,          //Local Computer
    NULL,          //ServicesActive database 
    SC_MANAGER_ALL_ACCESS);//full access rights
  if (HSCManager)
  {
    //Create Service
    Hservice = CreateService(
      HSCManager,        //SCM database
      MONDISK_SERVICE_NAME,      //name of service
      MONDISK_SERVICE_NAME,      //service name to display
      SERVICE_ALL_ACCESS,    //desired access
      SERVICE_KERNEL_DRIVER,  //service type
      SERVICE_DEMAND_START,  //start type
      SERVICE_ERROR_IGNORE,  //error control type 
      servicePath,        //path to service's binary 
      NULL,          //no load ordering group 
      NULL,          // no tag identifier 
      NULL,          // no dependencies
      NULL,          // LocalSystem account
      NULL);          // no password 
    if (Hservice == NULL)
    {  
      errorCode= GetLastError();
      printf("Install service :%d\n",errorCode);
      CloseServiceHandle(HSCManager);
      return FALSE;
    }
    else{
      printf("[InstallMyService] install service succeed\n");
      printf("[InstallMyService] start this service");
      if (!QueryServiceStatusEx(
        Hservice,
        SC_STATUS_PROCESS_INFO,
        (UCHAR *)&serviceInfo,
        sizeof(serviceInfo),
        &bytesNeeded)){
          errorCode = GetLastError();
          printf("Query service status failed %d\n",errorCode);
      }

      if (serviceInfo.dwCurrentState != SERVICE_RUNNING)
      {
        //service has not been started,so try to start service
        if (!StartService(Hservice,0,NULL)){
          errorCode = GetLastError();
          printf("start service failed %d\n",errorCode);
          return FALSE;
        }

      }

    }
  }

  CloseServiceHandle( Hservice);
  return TRUE;
}

BOOL
UnInstallMyService()
{
  DWORD        errorCode;
  SERVICE_STATUS    ServiceStatus;
  BOOL        ret = TRUE;
  DWORD    dwStartTime = GetTickCount();
  DWORD    dwTimeOut = 30000;//30-seconds time-out
  SC_HANDLE  Hservice = NULL;

  if (!HSCManager)
  {
    printf("[UnInstallDriver] SCMManager handle is not available\n");
    //Get a handle to the SCM database
    HSCManager = OpenSCManager(
      NULL,
      NULL,
      SC_MANAGER_ALL_ACCESS);
    if (!HSCManager)
    {
      errorCode = GetLastError();
      printf("open SCManager handle failed:%d\n",errorCode);
      return FALSE;
    }
  }else{
    //get a handle to the service
    Hservice = OpenService(
      HSCManager,
      MONDISK_SERVICE_NAME,
      SERVICE_ALL_ACCESS);
    if (!Hservice)
    {
      errorCode = GetLastError();
      printf("[UnInstallDriver] Open Service from SCM failed:%d\n",errorCode);
      CloseServiceHandle(HSCManager);
      return FALSE;
    }

    if( !ControlService( Hservice, SERVICE_CONTROL_STOP, &ServiceStatus ) )
    {
      errorCode = GetLastError();
      printf("[StopDriver]ControlService failed:%d\n",errorCode);
      return FALSE;
    }
    //delete the service
    //DeleteMyService:
    printf("[uninstallMyService]Deleting service\n");
    if (!DeleteService(Hservice))
    {
      if (GetLastError() == ERROR_SERVICE_MARKED_FOR_DELETE)
      {
        printf("[UnInstallDriver]ERROR_SERVICE_MARKED_FOR_DELETE\n");
        CloseServiceHandle(Hservice);
      }
      return FALSE;
    }else
      printf("[UnInstallDriver]Service deleted successfully\n"); 
  }
  
  CloseServiceHandle(Hservice);
  CloseServiceHandle(HSCManager);
  
  return ret;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也碰到这个错误,有两个程序会安装驱动服务,经常出现这个错误,但是重新启动程序又可以安装。
2010-4-27 14:17
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
有人解答么
2022-8-9 17:27
0
游客
登录 | 注册 方可回帖
返回
//