Bin ich Admin?
LCC-Compiler wird benötigt.
alle Dateien in ein Verzeichnis kopieren.
dann :
make checkadmin.exe
// checkt den angemeldeten Benutzer auf Administrator // borwinius /*<---------------------------------------------------------------------->*/ #include <windows.h> #include <windowsx.h> #include <commctrl.h> #include <string.h> #include <wchar.h> #include <tchar.h> #include "checkadminres.h" /*<---------------------------------------------------------------------->*/ #define ACCESS_READ 1 #define ACCESS_WRITE 2 HINSTANCE hInst; //globale Instanz BOOL bAdm; //sein oder nicht sein char cUser[128];//Benutzername ULONG ulU = 128;//Länge des bn static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); BOOL IsAdmin(void); //prüft ob der User Admin ist //-------------------------------------------------------------------------- int APIENTRY WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; INITCOMMONCONTROLSEX cc; memset(&wc,0,sizeof(wc)); wc.lpfnWndProc = DefDlgProc; wc.cbWndExtra = DLGWINDOWEXTRA; wc.hInstance = hInst = hinst; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wc.lpszClassName = " checkadmin"; RegisterClassEx(&wc); wc.hIcon = LoadIcon(hinst,"JSICON"); wc.hIconSm = wc.hIcon; memset(&cc,0,sizeof(cc)); cc.dwSize = sizeof(cc); cc.dwICC = 0xffffffff; InitCommonControlsEx(&cc); return DialogBox(hinst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) DialogFunc); } //-------------------------------------------------------------------------- /* You should add your initialization code here. This function will be called when the dialog box receives the WM_INITDIALOG message. */ static int InitializeApp(HWND hDlg,WPARAM wParam, LPARAM lParam) { bAdm = IsAdmin(); GetUserName(cUser,&ulU); SetClassLong(hDlg,GCL_HICON,(LONG)LoadIcon(hInst,"JSICON"));//Icon in Dialogbox return 1; } //-------------------------------------------------------------------------- // DialogNachrichtenfunktion static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: InitializeApp(hwndDlg,wParam,lParam); if(bAdm) { SetDlgItemText(hwndDlg,ID_MESSAGE,"Sie sind schon lokaler Administrator !!!"); SetDlgItemText(hwndDlg,ID_TEXT,"\n\nSeien Sie deshalb vorsichtig !"); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hwndDlg,1); return 1; } break; /* By default, WM_CLOSE is equivalent to CANCEL */ case WM_CLOSE: EndDialog(hwndDlg,0); return TRUE; } return FALSE; } //------------------------------------------------------------------------------ //Output: Return TRUE wenn user Administrator oder FALSE wenn nicht. // Errors: Return FALSE. BOOL IsAdmin(VOID) { HANDLE hToken; DWORD dwStatus; DWORD dwAccessMask; DWORD dwAccessDesired; DWORD dwACLSize; DWORD dwStructureSize = sizeof(PRIVILEGE_SET); PACL pACL = NULL; PSID psidAdmin = NULL; BOOL bReturn = FALSE; PRIVILEGE_SET ps; GENERIC_MAPPING GenericMapping; PSECURITY_DESCRIPTOR psdAdmin = NULL; SID_IDENTIFIER_AUTHORITY SystemSidAuthority = SECURITY_NT_AUTHORITY; if(!ImpersonateSelf(SecurityImpersonation)) goto LeaveIsAdmin; if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken)) { if (GetLastError() != ERROR_NO_TOKEN) goto LeaveIsAdmin; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) goto LeaveIsAdmin; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken)) goto LeaveIsAdmin; } if (!AllocateAndInitializeSid(&SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &psidAdmin)) goto LeaveIsAdmin; psdAdmin = LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); if (psdAdmin == NULL) goto LeaveIsAdmin; if (!InitializeSecurityDescriptor(psdAdmin, SECURITY_DESCRIPTOR_REVISION)) goto LeaveIsAdmin; dwACLSize = sizeof(ACL) + sizeof(ACCESS_ALLOWED_ACE) + GetLengthSid(psidAdmin) - sizeof(DWORD); pACL = (PACL)LocalAlloc(LPTR, dwACLSize); if (pACL == NULL) goto LeaveIsAdmin; if (!InitializeAcl(pACL, dwACLSize, ACL_REVISION2)) goto LeaveIsAdmin; dwAccessMask= ACCESS_READ | ACCESS_WRITE; if (!AddAccessAllowedAce(pACL, ACL_REVISION2, dwAccessMask, psidAdmin)) goto LeaveIsAdmin; if (!SetSecurityDescriptorDacl(psdAdmin, TRUE, pACL, FALSE)) goto LeaveIsAdmin; if(!SetSecurityDescriptorGroup(psdAdmin, psidAdmin, FALSE)) goto LeaveIsAdmin; if(!SetSecurityDescriptorOwner(psdAdmin, psidAdmin, FALSE)) goto LeaveIsAdmin; if (!IsValidSecurityDescriptor(psdAdmin)) goto LeaveIsAdmin; dwAccessDesired = ACCESS_READ; GenericMapping.GenericRead = ACCESS_READ; GenericMapping.GenericWrite = ACCESS_WRITE; GenericMapping.GenericExecute = 0; GenericMapping.GenericAll = ACCESS_READ | ACCESS_WRITE; if (!AccessCheck(psdAdmin, hToken, dwAccessDesired, &GenericMapping, &ps, &dwStructureSize, &dwStatus, &bReturn)) goto LeaveIsAdmin; if(!RevertToSelf()) bReturn = FALSE; LeaveIsAdmin: if (pACL) LocalFree(pACL); if (psdAdmin) LocalFree(psdAdmin); if (psidAdmin) FreeSid(psidAdmin); return bReturn; } //------------------------------------------------------------------------------
/* Wedit generated resource file */ #ifdef __LCC__ #include <windows.h> #endif #include "checkadminres.h" IDD_MAINDIALOG DIALOG 7, 20, 195, 94 STYLE DS_CENTER | DS_SETFOREGROUND | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION " checkadmin / richard@borwinius.de" FONT 8, "Helv" BEGIN DEFPUSHBUTTON "OK", IDOK, 51, 71, 97, 14 CTEXT "Sie sind kein Administrator !", ID_MESSAGE, 8, 6, 181, 12 CTEXT "\n\nTut mir leid", ID_TEXT, 8, 21, 181, 46, SS_SUNKEN END //JSICON ICON "js.ico"
/* Weditres generated include file. Do NOT edit */ #include <windows.h> #define IDD_MAINDIALOG 100 #define ID_MESSAGE 101 #define ID_TEXT 102
# Wedit Makefile for project checkadm CFLAGS=-Ic:\programme\lcc\include -O -A -unused CC=$(LCCROOT)\bin\lcc.exe LINKER=$(LCCROOT)\bin\lcclnk.exe OBJS=\ checkadmin.res \ checkadmin.obj EXE=checkadm.exe $(EXE): $(OBJS) Makefile $(LINKER) -s -subsystem windows -o checkadm.exe $(OBJS) # Build checkadmin.res CHECKADMIN_RC=\ checkadminres.h\ checkadmin.res: $(CHECKADMIN_RC) checkadmin.rc $(LCCROOT)\bin\lrc.exe -Ic:\programme\lcc\include checkadmin.rc # Build checkadmin.c CHECKADMIN_C=\ checkadminres.h\ checkadmin.obj: $(CHECKADMIN_C) checkadmin.c $(CC) -c $(CFLAGS) checkadmin.c link: $(LINKER) -s -subsystem windows -o checkadm.exe $(OBJS) clean: del $(OBJS) checkadm.exe