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 […]