PDA

View Full Version : کدام نوع user در ویندوز هستیم؟



zoncpp
شنبه 14 دی 1387, 15:36 عصر
سلام،
چطوری می توان تشخیص داد که ویندوز تحت چه نوع user ی می باشد؟ dministrator ، limitted و یا ...؟
آیا تابع api برای تشخیص این موضوع وجود ندارد؟

C++Lover
سه شنبه 17 دی 1387, 13:31 عصر
#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;
}



این کد رو من ننوشتم و قبلا برای کاری از اینترنت گرفته بودم و تو کامپیوترم موجود بود و منبعش هم یادم نیست. اما آقا مهدی در پست زیر زحمت کشیدن منبع رو پیدا کردند و آدرس رو گذاشتند.

پیروز باشید.

mehdi.mousavi
سه شنبه 17 دی 1387, 14:25 عصر
سلام.
اگر میخواهید کد فرد دیگه ای رو Copy & Paste کنید، لطفا Reference بهش رو هم بدید که معنی بدی پیدا نکنه! برای مشاهده کد اصلی و پاسخ کامل، میتونید به این سایت (http://vcfaq.mvps.org/sdk/21.htm) مراجعه کنید.

C++Lover
سه شنبه 17 دی 1387, 16:37 عصر
این کد رو که از چندین سال پیش تو بایگانی کدهام بود پیدا کردم.
اصلا هم یادم نمیاد از کجا گرفتم.
فقط تستش کردم مطمئن شم و اینجا گذاشتم.
چون کسی جواب نداده بود، قصدم راه انداختن کار دوستمون بود.
از اینکه خیلی خیلی زحمت کشیدی و کلی گشتی و منبع رو پیدا کردی و معرفی کردی ممنون. :)

mehdi.mousavi
سه شنبه 17 دی 1387, 17:04 عصر
این کد رو که از چندین سال پیش تو بایگانی کدهام بود پیدا کردم.
اصلا هم یادم نمیاد از کجا گرفتم. فقط تستش کردم مطمئن شم و اینجا گذاشتم. چون کسی جواب نداده بود، قصدم راه انداختن کار دوستمون بود. از اینکه خیلی خیلی زحمت کشیدی و کلی گشتی و منبع رو پیدا کردی و معرفی کردی ممنون. :)

خواهش میکنم. قابلی نداشت. البته زیر 30 ثانیه طول کشید تا پیداش کردم، چون اینقدر دست خطش تابلو بود که حس کردم کار سرکار عالی نیست! :قهقهه:

C++Lover
سه شنبه 17 دی 1387, 17:35 عصر
این همه استعداد یک جا.
خدا قوت داره.
خسته نباشی.

من از اولش هم ادعا نکردم این کد رو من نوشتم. همون طور که گفتم از قبل چون برای کاری ازش استفاده کرده بودم توی کامپیوترم موجود بود و منبعش رو هم به خاطر نداشتم و فقط اینجا گذاشتم تا کمکی کرده باشم. برای راحتی خیال شما و چون موضوع براتون خیلی حساس و مهمه پستم رو آپدیت کردم و نوشتم که کد کار من نیست.


__________________
غرور بزرگترين نعمتي است ، که خداوند ، به مردم ضعيف هديه کرده است. شکسپير
بنای کینه و نفرت روی سنگ بی حرمتی ها ساخته شده است.