Vra

Ek probeer om uit te vind of daar enige manier om 'n spesifieke funksie te verhef in 'n aansoek. Byvoorbeeld, ek het 'n app met stelsel en gebruikers instellings wat in die register gestoor word, ek moet net opstand vir wanneer die stelsel instellings verander moet word.

Ongelukkig al die inligting wat ek oor praat kom oor net die begin van 'n nuwe proses met verhoogde voorregte.

Was dit nuttig?

Oplossing

Wat jy regtig nodig het om te doen is die gids Application Data stoor jou stellings.

Ander wenke

Dit is onmoontlik om net een funksie of enige ander deel van 'n enkele proses verhef, omdat die opstand is 'n per-proses kenmerk. Net soos met die swangerskap, jou proses kan óf nie verhef of. As jy 'n deel van jou kode moet opruk na verhef, moet jy 'n afsonderlike proses te begin.

As jy egter jou funksie kan implementeer as 'n COM voorwerp, jy kan hardloop dit indirek verhef, deur die skep van 'n verhoogde COM voorwerp, soos volg:

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

Die beste artikel wat ek gesien het, is hierdie een:

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

Dit verduidelik af na die fyner kunsies van whats gaan op agter die skerms toe bestaande Microsoft programme is die opvoeding van die UAC vinnige en 'n bietjie van hoe om dit self te doen, of ten minste sal jy weet wat jou teen te maak dit werk ...

(let op die voorbeelde wat hy toon bestuur c ++)

Het jy 'n mooi artikel wat dek hierdie hier :

  

Die meeste aansoeke nie vereis administrateur voorregte te hardloop tyd. As jou aansoek nie in stand te hou kruis-sessie staat, terwyl dit voer en nie iets soos die wysiging van die Wet op Plaaslike veiligheidsbeleid nie doen nie, moet dit net goed wees hardloop met 'n standaard-gebruiker teken. Soms sekere dele van jou aansoek sal administrateur voorregte vereis, en jy moet skei uit die stukke in 'n afsonderlike proses. Ek sal later kry in 'n bietjie.

Dit lyk asof die artikel is 'n gesprek oor die gebruik van C ++, so ek gevind 'n ander artikel dat dek hoe om hierdie kode te bel met behulp van P / roep. So moet uitvoerbaar uit NET wees.

Die Windows SDK "Cross Tegnologie Monsters" het 'n "UACDemo" aansoek wat voorbeelde van 'n C # Windows toon Vorms aansoek wat 'n administrateur proses loods om 'n taak wat opstand vereis voer (maw skryf aan %programfiles%).

Dit is 'n groot beginpunt vir die skryf van jou eie funksie. Ek het hierdie monster uitgebrei na Net Remo Ting en IPC gebruik om te bel tussen my normale gebruiker proses en my verhoogde proses wat toelaat dat my om die opstand uitvoerbare generiese hou en te implementeer aansoek-spesifieke kode binne die aansoek.

Ek dink Aydsman is op die regte pad hier. Met die toevoeging van Vernoem Pype ondersteun om NET 3.5, moet jy 'n ordentlike IPC meganisme vir kommunikasie met 'n verhoogde kind proses.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top