Программный системный вызов WDCI Неожиданное поведение (повышенные разрешения)

Если бы я хотел отключить конкретную сетевую карту в вдовах, я обычно делал это так:

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.

Что дает?

0

Решение

Я думаю, что вы должны изменить эту строку

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");

Но я могу быть очень не прав …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]