如果我想在Widows上禁用特定的NIC,通常是这样做的:

wmic.exe path win32_networkadapter where "NetConnectionID = 'Local Area Connection 2'" call disable

通过提升的权限/以管理员命令行提示符运行...,它可以正常工作,生活很好。

所以我编译了这个简单的C ++ CLI应用程序:

#include "stdafx.h"
#include <string>
#include <iostream>
#include <cstdio>
#include <memory>

#ifndef popen
FILE *__cdecl popen(const char *_Command, const char *_Mode) { return _popen(_Command, _Mode); }
#endif

#ifndef pclose
int __cdecl pclose(FILE *_Stream) { return _pclose(_Stream); }
#endif

std::string exec(const char* cmd) {
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while (!feof(pipe.get())) {
        if (fgets(buffer, 128, pipe.get()) != NULL) result += buffer;
    }
    return result;
}

int main() {
    std::cout << exec("wmic path win32_networkadapter where ""NetConnectionID = 'Local Area Connection 2'"" call disable");
    return 0;
}


我从相同的提升权限的命令行提示符下执行...,但我得到的响应是:

C:\elevatesdh\Debug>elevatesdh.exe
Invalid Verb.


是什么赋予了?

最佳答案

我认为您必须更改此行

std::cout << exec("wmic path win32_networkadapter where ""NetConnectionID = 'Local Area Connection 2'"" call disable");




std::cout << exec("wmic path win32_networkadapter where \"NetConnectionID = 'Local Area Connection 2'\" call disable");


但是我可能是非常错误的...

关于c++ - 程序化系统调用WDCI意外行为(权限提升),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34012223/

10-13 09:48