To może wymagać
(zgaduję) zastosowania w programie TOKEN'ów ustawiających przywileje aplikacji. Takie tokeny stosuje się przed użyciem funkcji, do której programowi normalnie system broni dostępu.
Nie wiem jak to się robi dla Visty, ale np. dla XP można użyć takiego TOKEN'a:
- Kod: Zaznacz cały
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
gdzie komunikat SE_SHUTDOWN_NAME określa rodzaj dostępu, tutaj zamknięcie systemu.
Nie znam komunikatów dla Visty, no i nie wiem czy w tym systemie TOKEN'y mają wogóle zastosowanie, więc to raczej nie rozwiąże problemu.