축하, 즉 UAC가 작동하도록 설계되었습니다 정확히 어떻게, 그리고 어떤 전에 모든입니다 대부분의 응용 프로그램 개발자는 너무 게으르거나 보는 것을 고려하기에 너무 무서워합니다.
간단히 말해서 고도가 필요한 코드를 별도의 COM 개체 (DLL에 있음)에 넣은 다음 here에 설명 된 방법을 사용하여 상승 된 인스턴스.
HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
BIND_OPTS3 bo;
WCHAR wszCLSID[50];
WCHAR wszMonikerName[300];
StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0]));
HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]),\
L"Elevation:Administrator!new:%s", wszCLSID);
if (FAILED(hr))
return hr;
memset(&bo, 0, sizeof(bo));
bo.cbStruct = sizeof(bo);
bo.hwnd = hwnd;
bo.dwClassContext = CLSCTX_LOCAL_SERVER;
return CoGetObject(wszMonikerName, &bo, riid, ppv);
}
키는 모니 커 이름 앞에 Elevation:Administrator!new:
입니다. 이로 인해 권한 상승 프롬프트가 트리거되고 결과 COM 개체가 상승 된 토큰으로 만들어집니다.
굉장! 감사! 그냥 내가 뭘 찾고 있었는지! – MathOldTimer