Bunların hepsi veya bu şekilde eksik olan SE ( 1 , 2 , 3) 'te verilen birkaç soruya ve daha birçok soruya verilen cevapların çoğu, Windows'un güvenilir bir yerleşik hizmet sağlamadığını açıkça göstermiştir. . Öyleyse, kendi kararınızı vermenin zamanı geldi.
Başka kirli kesmek olmadan:
Aşağıdaki programı derleyin (talimatlar takip edin) veya önceden derlenmiş bir kopya alın . Bunun yalnızca bir kez yapılması gerekir, ardından .exe
her yeri kopyalayabilirsiniz (örneğin, Sysinternals Suite ile birlikte ).
Kod, Win2k + 1'de çalışır ( UAC, etki alanı, geçişli gruplar, ne olursa olsun, her ikisi de) - izinleri denetlerken sistemin kendisi ile aynı şekilde kullanılır. chkadmin
"Yönetici" veya "Yönetici olmayan" yazar ve çıkış kodunu sırasıyla 0 veya 1 olarak ayarlar. Çıkış, /q
anahtarla bastırılabilir .
chkadmin.c
:
#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#pragma comment (lib,"Advapi32.lib")
int main(int argc, char** argv) {
BOOL quiet = FALSE;
DWORD cbSid = SECURITY_MAX_SID_SIZE;
PSID pSid = _alloca(cbSid);
BOOL isAdmin;
if (argc > 1) {
if (!strcmp(argv[1],"/q")) quiet=TRUE;
else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
}
if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}
if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}
if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
return !isAdmin;
}
Derlemek için, Windows SDK komut isteminde çalıştırın:
cl /Ox chkadmin.c
(VS2012 + kullanıyorsanız, 2k / XP'yi hedeflemeniz gerekiyorsa daha fazla ayar yapılması gerekir )
Yöntem, /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908'in izniyle
1 MSDN, API’lerin XP + olduğunu iddia ediyor, ancak bu yanlış. CheckTokenMembership
2k + ve diğeri daha da eski .