문제

응용 프로그램 내에서 특정 기능을 향상시킬 수 있는 방법이 있는지 알아보려고 합니다.예를 들어 레지스트리에 저장되는 시스템 및 사용자 설정이 있는 앱이 있는데 시스템 설정을 변경해야 하는 경우에만 권한 상승이 필요합니다.

불행히도 내가 접한 모든 정보는 높은 권한으로 새 프로세스를 시작하는 것에 대해서만 이야기합니다.

도움이 되었습니까?

해결책

실제로 해야 할 일은 설정을 Application Data 폴더에 저장하는 것입니다.

다른 팁

권한 상승 수준은 프로세스별 특성이므로 단일 기능이나 단일 프로세스의 다른 부분만 권한을 높이는 것은 불가능합니다.임신과 마찬가지로 과정도 높아질 수도 있고 그렇지 않을 수도 있습니다.코드의 일부를 관리자 권한으로 실행해야 하는 경우 별도의 프로세스를 시작해야 합니다.

그러나 함수를 COM 개체로 구현할 수 있는 경우 다음과 같이 승격된 COM 개체를 생성하여 간접적으로 실행할 수 있습니다.

HRESULT 
CreateElevatedComObject (HWND hwnd, REFGUID guid, REFIID iid, void **ppv)
{
    WCHAR monikerName[1024];
    WCHAR clsid[1024];
    BIND_OPTS3 bo;

    StringFromGUID2 (guid, clsid, sizeof (clsid) / 2);

    swprintf_s (monikerName, sizeof (monikerName) / 2, L"Elevation:Administrator!new:%s", clsid);

    memset (&bo, 0, sizeof (bo));
    bo.cbStruct = sizeof (bo);
    bo.hwnd = hwnd;
    bo.dwClassContext = CLSCTX_LOCAL_SERVER;

    // Prevent the GUI from being half-rendered when the UAC prompt "freezes" it
    MSG paintMsg;
    int MsgCounter = 5000;  // Avoid endless processing of paint messages
    while (PeekMessage (&paintMsg, hwnd, 0, 0, PM_REMOVE | PM_QS_PAINT) != 0 && --MsgCounter > 0)
    {
        DispatchMessage (&paintMsg);
    }

    return CoGetObject (monikerName, &bo, iid, ppv);
}

내가 본 최고의 기사는 다음과 같습니다.

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

기존 Microsoft 응용 프로그램이 UAC 프롬프트를 표시할 때 뒤에서 무슨 일이 일어나고 있는지에 대한 핵심적인 내용과 이를 직접 수행하는 방법에 대해 설명합니다. 또는 적어도 이를 작동시키기 위해 어떤 어려움이 있는지 알게 될 것입니다. ..

(그가 보여주는 예제는 C++로 관리됩니다.)

찾았다 여기에서 이 내용을 다루는 좋은 기사:

대부분의 응용 프로그램에는 런타임 시 관리자 권한이 필요하지 않습니다.애플리케이션이 실행되는 동안 세션 간 상태를 유지하지 않고 로컬 보안 정책을 수정하는 등의 작업을 수행하지 않는 경우 표준 사용자 토큰을 사용해도 문제 없이 실행될 것입니다.때로는 애플리케이션의 특정 부분에 관리자 권한이 필요할 수 있으므로 해당 부분을 별도의 프로세스로 분리해야 합니다.그것에 대해서는 조금 나중에 다루겠습니다.

기사에서 C++ 사용에 관해 이야기하는 것 같아서 찾아봤습니다. 다른 기사 P/Invoke를 사용하여 이 코드를 호출하는 방법을 다룹니다.따라서 .NET에서 가능해야 합니다.

Windows SDK "Cross Technology Samples"에는 관리자 프로세스를 시작하여 권한 상승이 필요한 작업(예:쓰기 %programfiles%).

이는 자신만의 기능을 작성하기 위한 훌륭한 출발점입니다.이 샘플을 확장하여 .Net Remoting 및 IPC를 사용하여 일반 사용자 프로세스와 상승된 프로세스 간에 호출함으로써 권한 상승 실행 파일을 일반으로 유지하고 애플리케이션 내에서 애플리케이션별 코드를 구현할 수 있게 되었습니다.

나는 Aydsman이 여기서 올바른 길을 가고 있다고 생각합니다..NET 3.5에 명명된 파이프 지원이 추가되면 승격된 하위 프로세스와 통신하기 위한 적절한 IPC 메커니즘이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top