1 DWORD GetIntegrityLevel()
2 {
3 DWORD Result = 0;
4 if(!IsVista()) return Result;
5 HANDLE hToken;
6 HANDLE hProcess;
7 DWORD dwLengthNeeded;
8 DWORD dwError = ERROR_SUCCESS;
9 PTOKEN_MANDATORY_LABEL pTIL = NULL;
10 DWORD dwIntegrityLevel;
11 hProcess = GetCurrentProcess();
12 if (OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_QUERY_SOURCE, &hToken))
13 {
14 if (!GetTokenInformation(hToken, (::TOKEN_INFORMATION_CLASS)TokenIntegrityLevel, NULL, 0, &dwLengthNeeded))
15 {
16 dwError = GetLastError();
17 if (dwError == ERROR_INSUFFICIENT_BUFFER)
18 {
19 pTIL = (PTOKEN_MANDATORY_LABEL)LocalAlloc(0, dwLengthNeeded);
20 if (pTIL != NULL)
21 {
22 if (GetTokenInformation(hToken, (::TOKEN_INFORMATION_CLASS)TokenIntegrityLevel, pTIL, dwLengthNeeded, &dwLengthNeeded))
23 {
24 dwIntegrityLevel = *GetSidSubAuthority(pTIL->Label.Sid,
25 (DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTIL->Label.Sid)-1));
26 if (dwIntegrityLevel < SECURITY_MANDATORY_MEDIUM_RID)
27 {
28 Result = IL_LOW;
29 MessageBox(0,"low","low",MB_OK);
30 }
31 else if (dwIntegrityLevel >= SECURITY_MANDATORY_MEDIUM_RID &&
32 dwIntegrityLevel < SECURITY_MANDATORY_HIGH_RID)
33 {
34 Result = IL_MEDIUM;
35 MessageBox(0,"MEDIUM","MEDIUM",MB_OK);
36 }
37 else if (dwIntegrityLevel >= SECURITY_MANDATORY_HIGH_RID)
38 {
39 Result = IL_HIGH;
40 MessageBox(0,"HIGH","HIGH",MB_OK);
41 }
42 }
43 LocalFree(pTIL);
44 }
45 }
46 }
47 CloseHandle(hToken);
48 }
49 return Result;
50 }