অনেকগুলি, এসই জুড়ে এটির একাধিক উত্তর এবং একাধিক অন্যান্য প্রশ্নের ( কয়েকটি নাম লেখার জন্য 1 , 2 , 3 ), যেগুলির সমস্তই এইভাবে বা অন্য কোনওভাবেই অভাব রয়েছে, স্পষ্টভাবে প্রমাণ করেছে যে উইন্ডোজ কোনও নির্ভরযোগ্য অন্তর্নির্মিত ইউটিলিটি সরবরাহ করে না । সুতরাং, আপনার নিজের রোল আউট করার সময় এসেছে।
আর কোনও নোংরা হ্যাক ছাড়া:
নিম্নলিখিত প্রোগ্রামটি সংকলন করুন (নির্দেশাবলী অনুসরণ করুন), বা একটি পূর্বনির্ধারিত অনুলিপি পান । এটি কেবল একবার করা দরকার, তারপরে আপনি যে কোনও .exe
জায়গায় অনুলিপি করতে পারেন (যেমন সিসিনটার্নাল স্যুট বরাবর )।
কোডটি উইন 2 কে + 1 এ উভয়ই ইউএসি, ডোমেন, ট্রানজিটিভ গ্রুপগুলির সাথে এবং না ছাড়াই কাজ করে - কারণ অনুমতিগুলি যাচাই করার সময় এটি সিস্টেম নিজেই একইভাবে ব্যবহার করে। 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-ad प्रशासক- রাইটস / 4230908# 4230908 এর সৌজন্যে
1 এমএসডিএন দাবি করে যে এপিআইগুলি এক্সপি + তবে এটি মিথ্যা। CheckTokenMembership
2 কে + এবং অন্যটি এর চেয়েও বেশি বয়স্ক ।