इस पर कई (एसई ( 1 , 2 , 3 कुछ नाम करने के लिए) और कई अन्य सवालों के जवाब , जिनमें से सभी इस तरह से या किसी अन्य की कमी हैं, ने स्पष्ट रूप से दिखाया है कि विंडोज एक विश्वसनीय अंतर्निहित उपयोगिता प्रदान नहीं करता है । तो, यह अपना खुद का रोल करने का समय है।
बिना किसी और गंदे हैक के:
निम्नलिखित कार्यक्रम (निर्देशों का पालन करें) को संकलित करें, या एक पूर्व-निर्धारित प्रतिलिपि प्राप्त करें । यह केवल एक बार किए जाने की आवश्यकता है, फिर आप .exeहर जगह कॉपी कर सकते हैं (उदाहरण के लिए सिसिन्टर्नल्स सूट )।
कोड Win2k + 1 में काम करता है , दोनों के साथ और बिना UAC, डोमेन, सकर्मक समूह, जो भी - क्योंकि यह अनुमतियों की जाँच करते समय सिस्टम के समान ही उपयोग करता है। chkadmin"एडमिन" या "नॉन-एडमिन" प्रिंट करता है और एग्जिट कोड को क्रमशः 0 या 1 पर सेट करता है। आउटपुट को /qस्विच के साथ दबाया जा सकता है ।
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;
}
संकलित करने के लिए, विंडोज एसडीके कमांड प्रॉम्प्ट में चलाएं:
cl /Ox chkadmin.c
(यदि आप VS2012 + का उपयोग कर रहे हैं , तो 2k / XP को लक्षित करने के लिए अधिक समायोजन की आवश्यकता है )
विधि /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908 के सौजन्य से है
1 MSDN का दावा है कि API XP + हैं लेकिन यह गलत है। CheckTokenMembership 2k + है और दूसरा भी पुराना है ।