Почему InitiateSystemShutdown в сетке не вырубает компы. (W2k Prof.->W2K Prof.). Есть ли аналог, работающий с W2k Prof.
MSDN говорит следуещее: To shut down a remote computer, the calling thread must have the SE_REMOTE_SHUTDOWN_NAME privilege on the remote computer. Когда то в университете развлекался. Работает на УРА, если ты входиш в групу админов, и привилегия включена.
Flanker Без прав админа ты и свой комп, вроде, таким методом не вырубишь. Свой можно вырубать через ExitWindowsEx. Иначе надо заходить под админом, и активировать привилегию SE_REMOTE_SHUTDOWN_NAME, используя функцию AdjustTokenPrivileges. D ckexft ExitWindowsEx нужно иметь привилегию SE_SHUTDOWN_NAME, по умолчанию она доступна для активации у всех пользователей. Однако доступность для активации не освобождает от вызова AdjustTokenPrivileges перед использованием, это всего лишь позволяет получить возможность получить данную привилегию Уффф... Майкрософт всё запутала.
Вырубал. И под гостем. Только вот проблемы с сетью из под W2k Prof не вырубается W2k Prof. Пример кривой, но рабочий //======================================================= #include<windows.h> #include<stdio.h> void main() { TOKEN_PRIVILEGES tkp; HANDLE hToken; char MachineName[256]; char Msg[256]; puts("Enter Machine name: "); gets(MachineName); puts("Enter Message: "); gets(Msg); 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, NULL, 0); InitiateSystemShutdown(MachineName, Msg, 15, TRUE, FALSE); }