سلام،
چطوری می توان تشخیص داد که ویندوز تحت چه نوع user ی می باشد؟ dministrator ، limitted و یا ...؟
آیا تابع api برای تشخیص این موضوع وجود ندارد؟
سلام،
چطوری می توان تشخیص داد که ویندوز تحت چه نوع user ی می باشد؟ dministrator ، limitted و یا ...؟
آیا تابع api برای تشخیص این موضوع وجود ندارد؟
#include <iostream>
#include <tchar.h>
#include <windows.h>
#include <Ntsecapi.h>
#define BUFF_SIZE 1024
BOOL IsAdmin()
{
HANDLE hToken = NULL;
PSID pAdminSid = NULL;
BYTE buffer[BUFF_SIZE];
PTOKEN_GROUPS pGroups = (PTOKEN_GROUPS)buffer;
DWORD dwSize; // buffer size
DWORD i;
BOOL bSuccess;
SID_IDENTIFIER_AUTHORITY siaNtAuth = SECURITY_NT_AUTHORITY;
// get token handle
if ( !OpenProcessToken ( GetCurrentProcess ( ), TOKEN_QUERY, &hToken ) )
return false;
bSuccess = GetTokenInformation ( hToken, TokenGroups,
(LPVOID)pGroups, BUFF_SIZE,
&dwSize );
CloseHandle ( hToken );
if ( !bSuccess )
return false;
if ( !AllocateAndInitializeSid ( &siaNtAuth, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,0,0,0,0,0, &pAdminSid ) )
return false;
bSuccess = FALSE;
for ( i = 0; (i < pGroups->GroupCount) && !bSuccess; i++ )
{
if ( EqualSid ( pAdminSid, pGroups->Groups[i].Sid ) )
bSuccess = TRUE;
}
FreeSid ( pAdminSid );
return bSuccess;
}
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
if (IsAdmin())
cout << "User is an Administrator." << endl;
else
cout << "User is not an Administrator." << endl;
getchar();
return 0;
}
این کد رو من ننوشتم و قبلا برای کاری از اینترنت گرفته بودم و تو کامپیوترم موجود بود و منبعش هم یادم نیست. اما آقا مهدی در پست زیر زحمت کشیدن منبع رو پیدا کردند و آدرس رو گذاشتند.
پیروز باشید.
آخرین ویرایش به وسیله C++Lover : چهارشنبه 18 دی 1387 در 02:02 صبح
سلام.
اگر میخواهید کد فرد دیگه ای رو Copy & Paste کنید، لطفا Reference بهش رو هم بدید که معنی بدی پیدا نکنه! برای مشاهده کد اصلی و پاسخ کامل، میتونید به این سایت مراجعه کنید.
این کد رو که از چندین سال پیش تو بایگانی کدهام بود پیدا کردم.
اصلا هم یادم نمیاد از کجا گرفتم.
فقط تستش کردم مطمئن شم و اینجا گذاشتم.
چون کسی جواب نداده بود، قصدم راه انداختن کار دوستمون بود.
از اینکه خیلی خیلی زحمت کشیدی و کلی گشتی و منبع رو پیدا کردی و معرفی کردی ممنون. :)
آخرین ویرایش به وسیله C++Lover : سه شنبه 17 دی 1387 در 16:48 عصر
این همه استعداد یک جا.
خدا قوت داره.
خسته نباشی.
من از اولش هم ادعا نکردم این کد رو من نوشتم. همون طور که گفتم از قبل چون برای کاری ازش استفاده کرده بودم توی کامپیوترم موجود بود و منبعش رو هم به خاطر نداشتم و فقط اینجا گذاشتم تا کمکی کرده باشم. برای راحتی خیال شما و چون موضوع براتون خیلی حساس و مهمه پستم رو آپدیت کردم و نوشتم که کد کار من نیست.
__________________
غرور بزرگترين نعمتي است ، که خداوند ، به مردم ضعيف هديه کرده است. شکسپير
بنای کینه و نفرت روی سنگ بی حرمتی ها ساخته شده است.
آخرین ویرایش به وسیله C++Lover : چهارشنبه 18 دی 1387 در 02:19 صبح