bool DisableTaskSchedule(WCHAR* TaskPath, WCHAR* TaskName)
{
bool ret = TRUE;
// Initialize COM.
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if( FAILED(hr) )
{
log_error("CoInitializeEx failed: %x", hr );
ret = FALSE;
}
// Set general COM security levels.
hr = CoInitializeSecurity(
NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
0,
NULL);
if( RPC_E_TOO_LATE != hr && FAILED(hr))
{
log_error("CoInitializeSecurity failed: %x", hr );
CoUninitialize();
ret = FALSE;
}
ITaskService *pService = NULL;
hr = CoCreateInstance( CLSID_TaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskService,
(void**)&pService );
if (FAILED(hr))
{
log_error("Failed to create an instance of ITaskService: %x", hr);
CoUninitialize();
ret = FALSE;
}
// Connect to the task service.
hr = pService->Connect(_variant_t(), _variant_t(),
_variant_t(), _variant_t());
if( FAILED(hr) )
{
log_error("ITaskService::Connect failed: %x", hr );
pService->Release();
CoUninitialize();
ret = FALSE;
}
LPCWSTR wszTaskName = TaskName;
LPCWSTR wszTaskPath = TaskPath;
// ------------------------------------------------------
// Get the pointer to the root task folder.
// This folder will hold the new task that is registered.
ITaskFolder *pRootFolder = NULL;
hr = pService->GetFolder( _bstr_t(wszTaskPath) , &pRootFolder );
pService->Release();
if( FAILED(hr) )
{
log_error("Cannot get Root Folder pointer: %x", hr );
CoUninitialize();
ret = FALSE;
}
IRegisteredTask *pTASK = NULL;
hr = pRootFolder->GetTask( _bstr_t(wszTaskName),&pTASK);
if( FAILED(hr) )
{
log_error("Cannot get task pointer: %x", hr );
pRootFolder->Release();
CoUninitialize();
ret = FALSE;
}
ITaskDefinition *pTask = NULL;
hr = pTASK->get_Definition(&pTask);
if( FAILED(hr) )
{
log_error("Cannot get Task Definition pointer: %x", hr );
pRootFolder->Release();
pTASK->Release();
CoUninitialize();
ret = FALSE;
}
ITriggerCollection* pTriggerCollection = NULL;
hr = pTask->get_Triggers(&pTriggerCollection);
if( FAILED(hr) )
{
log_error("Cannot get Task Triggers pointer: %x", hr );
pRootFolder->Release();
pTASK->Release();
pTask->Release();
CoUninitialize();
ret = FALSE;
}
long Count = -1;
hr = pTriggerCollection->get_Count(&Count);
if( FAILED(hr) )
{
log_error("Cannot get Trigger Count: %x", hr );
pRootFolder->Release();
pTASK->Release();
pTask->Release();
CoUninitialize();
ret = FALSE;
}
ITrigger *pTrigger =NULL;
for (int i = 0; i < Count; i++)
{
hr = pTriggerCollection->get_Item(i+1,&pTrigger);
if( FAILED(hr) )
{
log_error("Cannot get Trigger pointer: %x", hr );
continue;
}
hr = pTrigger->put_Enabled(0);/* 0 == FALSE, -1 == TRUE */
if( FAILED(hr) )
{
log_error("Cannot put Trigger Enabled or Disabled: %x", hr );
}
}
IRegisteredTask *pRegisteredTask = NULL;
hr = pRootFolder->RegisterTaskDefinition(
_bstr_t( wszTaskName ),
pTask,
TASK_CREATE_OR_UPDATE,
_variant_t(),
_variant_t(),
TASK_LOGON_INTERACTIVE_TOKEN,
_variant_t(L""),
&pRegisteredTask);
if( FAILED(hr) )
{
log_error("Error saving the Task : %x", hr );
pRootFolder->Release();
pTASK->Release();
pTask->Release();
CoUninitialize();
ret = FALSE;
}
pRootFolder->Release();
pTASK->Release();
pTask->Release();
CoUninitialize();
return ret;
}
禁用windows某个服务计划
最新推荐文章于 2022-12-06 15:08:45 发布