tosif

I wrote a simple app in C# which lets the user logoff, shutdown power off his comp. But Its only logging off, none of the other features are working. After a bit of research I found out that my app doesnĄ¯t have the SE_SHUTDOWN_NAME privilege. Following piece of code i found out in the docs, to adjust the privilege. But It is in C++ and i want it in C#. Plzz someone help me out.

BOOL MySystemShutdown()

{

HANDLE hToken;

TOKEN_PRIVILEGES tkp;



// Get a token for this process.



if (!OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

return( FALSE );



// Get the LUID for the shutdown privilege.



LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,

&tkp.Privileges[0].Luid);



tkp.PrivilegeCount = 1; // one privilege to set

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;



// Get the shutdown privilege for this process.



AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

(PTOKEN_PRIVILEGES)NULL, 0);



if (GetLastError() != ERROR_SUCCESS)

return FALSE;



// Shut down the system and force all applications to close.



if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,

SHTDN_REASON_MAJOR_OPERATINGSYSTEM |

SHTDN_REASON_MINOR_UPGRADE |

SHTDN_REASON_FLAG_PLANNED))

return FALSE;



return TRUE;

//

}


Re: Visual C# General Adjusting priivilege levels

Peter Ritchie

It's not your app that doesn't have the privledge, it's the user running it that doesn't have the privledge. You'll have to impersonate another users to ensure you have that privledge.

Also, this is not C# Language specific, I've moved this thread to the General forum.




Re: Visual C# General Adjusting priivilege levels

Figo Fei - MSFT

Hi,

Try check if the first parameter of ExitWindowsEx is 1 (means shut down) while 0 means logoff and 2 means reboot.

For more information, see: http://msdn2.microsoft.com/en-us/library/aa376868.aspx

Thanks