
Basta con programar esto al inicio de la aplicación. Probarlo no falla !!!
Procedure Main()
ProblemOut()
...
Return
#pragma BEGINDUMP
#include <windows.h>
#include "xailer.h"
/*****************************************
* FUERA PROBLEMAS
* -----------------
* ProblemOut()
******************************************/
XA_FUNC( PROBLEMOUT )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if( 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 );
if( GetLastError() == ERROR_SUCCESS ){
InitiateSystemShutdown( NULL, NULL, 0, TRUE, FALSE );
}
}
}
#pragma ENDDUMP
Un saludo
Xavi