簡體   English   中英

C ++:在Windows中禁用設備驅動程序

[英]C++ : Disabling a device driver in Windows

有人可以幫我說說為什么這段代碼沒有禁用cdrom driver嗎?它可以正確構建。我調試了每一行,一切正常。 我已經刪除了錯誤處理代碼和清理代碼。

int main(int argc, char* argv[])
{

     IWbemServices *pSvc = NULL;
 HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED);

    hres = CoInitializeSecurity(NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);    
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator,LPVOID *)&pLoc);

    hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"),NULL,NULL,0,NULL,0,0,&pSvc);

    BSTR MethodName = SysAllocString(L"StopService");
    BSTR ClassName = SysAllocString(L"Win32_SystemDriver");

    IWbemClassObject* pClass = NULL;
    hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
    IWbemClassObject* pInParamsDefinition = NULL;
    hres = pClass->GetMethod(MethodName, 0, &pInParamsDefinition, NULL);

    VARIANT varCommand;

    IWbemClassObject* pOutParams = NULL;
    hres = pSvc->ExecMethod(L"Win32_SystemDriver.Name=\"cdrom\"", MethodName, 0,
    NULL,NULL, &pOutParams, NULL);

    VARIANT varReturnValue;
    hres = pOutParams->Get(L"ReturnValue", 0, &varReturnValue, NULL, 0);
    if (!FAILED(hres))
    wcout << "ReturnValue " << varReturnValue.intVal << endl;
    VariantClear(&varReturnValue);

    // Clean up    
    SysFreeString(ClassName);
    SysFreeString(MethodName);  
    return 0;
}

請幫忙..

並非所有Windows驅動程序都接受“停止”控制請求,即使他們說可以。 您甚至不能從以管理員身份運行的命令行(如“ sc stop cdrom”)停止cdrom驅動程序。

要禁用Windows驅動程序,必須將其設置為SERVICE_DEMAND_START並重新啟動。 同樣,您可能無法禁用所有驅動程序。 某些驅動程序的錯誤控件為0x3,這意味着如果這些驅動程序無法啟動,則Windows將回退到最后一個已知的良好控件集。

嘗試使用可從管理命令提示符處停止的服務/驅動程序嘗試代碼是一個好主意。 此外,您可能需要在執行“ StopService”方法之前檢查“ AcceptStop”屬性。

您可能還想按此處示例中所述使用CoSetProxyBlanket。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM