#define SERVICE_KEY(_Driver) \
SERVICES_KEY ## "\\" ## #_Driver
+#define AGENT_NAME "XENAGENT"
+
static VOID
#pragma prefast(suppress:6262) // Function uses '1036' bytes of stack: exceeds /analyze:stacksize'1024'
__Log(
return FALSE;
}
+static BOOL
+AgentDelete(
+ VOID
+ )
+{
+ SC_HANDLE SCManager;
+ SC_HANDLE Service;
+ BOOL Success;
+ SERVICE_STATUS Status;
+ HRESULT Error;
+
+ Log("====>");
+
+ SCManager = OpenSCManager(NULL,
+ NULL,
+ SC_MANAGER_ALL_ACCESS);
+
+ if (SCManager == NULL)
+ goto fail1;
+
+ Service = OpenService(SCManager,
+ AGENT_NAME,
+ SERVICE_ALL_ACCESS);
+
+ if (Service == NULL)
+ goto fail2;
+
+ Success = ControlService(Service,
+ SERVICE_CONTROL_STOP,
+ &Status);
+
+ if (!Success)
+ goto fail3;
+
+ Success = DeleteService(Service);
+
+ if (!Success)
+ goto fail4;
+
+ CloseServiceHandle(Service);
+ CloseServiceHandle(SCManager);
+
+ Log("<====");
+
+ return TRUE;
+
+fail4:
+ Log("fail4");
+
+fail3:
+ Log("fail3");
+
+ CloseServiceHandle(Service);
+
+fail2:
+ Log("fail2");
+
+ CloseServiceHandle(SCManager);
+
+fail1:
+ Error = GetLastError();
+
+ {
+ PTCHAR Message;
+ Message = GetErrorMessage(Error);
+ Log("fail1 (%s)", Message);
+ LocalFree(Message);
+ }
+
+ return FALSE;
+}
+
static HRESULT
DifInstallPreProcess(
IN HDEVINFO DeviceInfoSet,
UNREFERENCED_PARAMETER(DeviceInfoData);
UNREFERENCED_PARAMETER(Context);
- Log("<===>");
+ Log("====>");
+
+ (VOID) AgentDelete();
+
+ Log("<====");
return NO_ERROR;
}