1. //Code by pnig0s  //Date:2012,3,17 
  2. #include <stdio.h> 
  3. #include <Windows.h> 
  4. #include <lm.h> 
  5. #pragma comment(lib,"Netapi32.lib") 
  6.  
  7. int AddUser(LPWSTR lpUsername,LPWSTR lpPassword,LPWSTR lpServerName); 
  8. int SetGroup(LPWSTR lpUsername,LPWSTR lpServerName,LPWSTR lpGroupName); 
  9. BOOL ImprovePriv(LPWSTR name); 
  10.  
  11. int main(INT argc,char * argv[]) 
  12.     BOOL bResult = ImprovePriv(SE_MACHINE_ACCOUNT_NAME); 
  13.     if(argc < 3) 
  14.     { 
  15.         printf("\nCode by Pnig0s1992"); 
  16.         printf("\nUsage:"); 
  17.         printf("\n\t%s UserName Password",argv[0]); 
  18.         printf("\n\tRemark:Default add to Group:Administrators."); 
  19.         return -1; 
  20.     } 
  21.  
  22.     if(bResult) 
  23.     { 
  24.         printf("Successfully promote priv!"); 
  25.  
  26.     }else 
  27.     { 
  28.         printf("Failed promote priv."); 
  29.         return -1; 
  30.     } 
  31.     int Namesize=MultiByteToWideChar(CP_ACP,0,argv[1],-1,NULL,0); 
  32.     wchar_t *wUserName =new wchar_t[Namesize+1]; 
  33.     if(!MultiByteToWideChar(CP_ACP,0,argv[1],-1,wUserName,Namesize)) 
  34.     { 
  35.         return false
  36.     } 
  37.  
  38.     int Passsize=MultiByteToWideChar(CP_ACP,0,argv[2],-1,NULL,0); 
  39.     wchar_t *wPassword =new wchar_t[Passsize+1]; 
  40.     if(!MultiByteToWideChar(CP_ACP,0,argv[2],-1,wPassword,Passsize)) 
  41.     { 
  42.         return false
  43.     } 
  44.     LPTSTR lpName = wUserName; 
  45.     LPTSTR lpPassword = wPassword; 
  46.     LPWSTR lpSevName = NULL; 
  47.     LPWSTR lpGroupName = L"Administrators"
  48.     AddUser(lpName,lpPassword,lpSevName); 
  49.     SetGroup(lpName,lpSevName,lpGroupName); 
  50.  
  51.     return 0; 
  52. BOOL ImprovePriv(LPWSTR name) 
  53.     HANDLE hToken; 
  54.     if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)) 
  55.     { 
  56.         printf("\nGet process token failed.(%d)",GetLastError()); 
  57.         return FALSE; 
  58.     } 
  59.  
  60.     TOKEN_PRIVILEGES tkp; 
  61.     tkp.PrivilegeCount = 1; 
  62.  
  63.     if(!LookupPrivilegeValue(NULL,name,&tkp.Privileges[0].Luid)) 
  64.     { 
  65.         printf("\nLookup process priv failed.(%d)",GetLastError()); 
  66.         return FALSE; 
  67.     } 
  68.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
  69.  
  70.     if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,0,NULL,NULL)) 
  71.     { 
  72.         printf("\nAjust process priv failed.(%d)",GetLastError()); 
  73.         return FALSE; 
  74.     } 
  75.     CloseHandle(hToken); 
  76.  
  77.     return TRUE; 
  78. int AddUser(LPWSTR lpUsername,LPWSTR lpPassword,LPWSTR lpServerName) 
  79.     USER_INFO_1 ui; 
  80.     DWORD dwLevel = 1; 
  81.     DWORD dwError = 0; 
  82.     NET_API_STATUS nStatus; 
  83.     ui.usri1_name = lpUsername; 
  84.     ui.usri1_password = lpPassword; 
  85.     ui.usri1_priv = USER_PRIV_USER; 
  86.     ui.usri1_home_dir = NULL; 
  87.     ui.usri1_comment = NULL; 
  88.     ui.usri1_flags  = UF_SCRIPT; 
  89.     ui.usri1_script_path  = NULL; 
  90.     nStatus = NetUserAdd(lpServerName,dwLevel,(LPBYTE)&ui,&dwError); 
  91.     if(nStatus == NERR_Success) 
  92.     { 
  93.         printf("\nAdd user:%s successfully!",lpUsername); 
  94.     }else 
  95.     { 
  96.         //dwError = GetLastError(); 
  97.         printf("\nAdd user failed:%d.",nStatus); 
  98.  
  99.     } 
  100.  
  101.     return 0; 
  102. int SetGroup(LPWSTR lpUsername,LPWSTR lpServerName,LPWSTR lpGroupName) 
  103.  
  104.     NET_API_STATUS nStatus; 
  105.     LOCALGROUP_MEMBERS_INFO_3  lgui; 
  106.     lgui.lgrmi3_domainandname = lpUsername; 
  107.     nStatus = NetLocalGroupAddMembers(lpServerName,lpGroupName,3,(LPBYTE)&lgui,1); 
  108.     if(nStatus == NERR_Success) 
  109.     { 
  110.         printf("\nSuccessfully set USER:%S to GROUP:%S!",lpUsername,lpGroupName); 
  111.     }else if(nStatus == NERR_GroupNotFound) 
  112.     { 
  113.         printf("\nCan't find such a group:%S.",lpGroupName); 
  114.     }else 
  115.     { 
  116.         printf("\nSet GROUP:%S failed.",lpGroupName); 
  117.     } 
  118.  
  119.     return 0;