How to check if my account has LPM privilege
Posted by Karthick P.K on July 18, 2010
#include <windows.h> #include <string> #include <winbase.h> #include <iostream> using namespace std; #include <psapi.h> #pragma comment(lib,"psapi.lib") void main() { long int s=0; printf("\nThis program will allocate memory using AWE allocator API's"); printf("\nEnter the size of memory to be allocated using AWE API's:"); scanf("%d",&s); LPVOID lpaddress=NULL; SIZE_T size=s; LPVOID ADD; BOOL bResult= FALSE; BOOL bResult2= FALSE; ULONG_PTR sizemap= (size)*1024*1024/4096; if( ! LoggedSetLockPagesPrivilege( GetCurrentProcess(), TRUE ) ) //. The SeLockMemoryPrivilege privilege must be enabled in the caller's token or the function will fail with ERROR_PRIVILEGE_NOT_HELD { printf("\n No Previledge"); printf("\n Error: %u", GetLastError() ); return; } ULONG_PTR * aRAMPages = new ULONG_PTR[sizemap]; ADD=VirtualAlloc(lpaddress,(size*1024*1024),MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE); if (ADD==0) { printf ("allocation failled"); printf("\n %u", GetLastError() ); return; } bResult=AllocateUserPhysicalPages(GetCurrentProcess(),&sizemap,aRAMPages); if( bResult != TRUE ) { printf("\n %uError in AllocateUserPhysicalPages", GetLastError() ); return; } bResult2=MapUserPhysicalPages(ADD,sizemap,aRAMPages); if( bResult != TRUE ) { printf("\n %uError in MapUserPhysicalPages", GetLastError() ); return; } printf("\nAllocated %d MB using AWE allocator API's which SQLServer uses when LPM is enabled.",s ); system("pause");
}
BOOL LoggedSetLockPagesPrivilege ( HANDLE hProcess,BOOL bEnable)
{
struct {
DWORD Count;
LUID_AND_ATTRIBUTES Privilege [1];
} Info;
HANDLE Token;
BOOL Result;
// Open the token.
Result = OpenProcessToken ( hProcess,
TOKEN_ADJUST_PRIVILEGES,
& Token);
if( Result != TRUE )
{
printf( "Cannot open process token.\n" );
return FALSE;
}
// Enable or disable?
Info.Count = 1;
if( bEnable )
{
Info.Privilege[0].Attributes = SE_PRIVILEGE_ENABLED;
}
else
{
Info.Privilege[0].Attributes = 0;
}
// Get the LUID.
Result = LookupPrivilegeValue ( NULL,
SE_LOCK_MEMORY_NAME,
&(Info.Privilege[0].Luid));
if( Result != TRUE )
{
printf( "Cannot get privilege for %s.\n", SE_LOCK_MEMORY_NAME );
return FALSE;
}
// Adjust the privilege.
Result = AdjustTokenPrivileges ( Token, FALSE,
(PTOKEN_PRIVILEGES) &Info,
0, NULL, NULL);
// Check the result.
if( Result != TRUE )
{
printf ("Cannot adjust token privileges (%u) Error:", GetLastError() );
return FALSE;
}
else
{
if( GetLastError() != ERROR_SUCCESS )
{
printf ("\nCannot enable the SE_LOCK_MEMORY_NAME privilege; ");
printf ("\nPlease check the local policy.\n");
return FALSE;
}
}
CloseHandle( Token );
return TRUE;
};
Regards
Karthick P.K
Top SQL Server blogs from MSSQLWIKI « MSSQLWIKI said
[…] How to check if my account has LPM privilege […]