Windows
Code: |
program getpass; ........ type ... ListBox: TListBox; procedure getpasswords; ....... end;
const Count: Integer = 0;
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;
implementation
{$R *.DFM}
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords'; type PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; ResourceSize: Word; PasswordSize: Word; EntryIndex: Byte; EntryType: Byte; PasswordC: Char; end; var WinPassword: TWinPassword;
function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall; var Password: String; PC: Array[0..$FF] of Char; begin inc(Count);
Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); PC[WinPassword.ResourceSize] := #0; CharToOem(PC, PC); Password := StrPas(PC);
Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize); Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize); PC[WinPassword.PasswordSize] := #0; CharToOem(PC, PC); Password := Password + ': ' + StrPas(PC);
Form1.ListBox.Items.Add(Password); Result := True; end;
procedure tform1.getpasswords; var error: string; begin if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then begin error := 'Can not load passwords: User is not loged on.'; end else if Count = 0 then error := 'No passwords found...' end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
type PTOKEN_GROUPS = TOKEN_GROUPS^;
function RunningAsAdministrator(): Boolean; var SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY; psidAdmin: PSID; ptg: PTOKEN_GROUPS = nil; htkThread: Integer; { HANDLE } cbTokenGroups: Longint; { DWORD } iGroup: Longint; { DWORD } bAdmin: Boolean; begin Result := false; if not OpenThreadToken(GetCurrentThread(), // get security token TOKEN_QUERY, FALSE, htkThread) then if GetLastError() = ERROR_NO_TOKEN then begin if not OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, htkThread) then Exit; end else Exit;
if GetTokenInformation(htkThread, // get #of groups TokenGroups, nil, 0, cbTokenGroups) then Exit;
if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then Exit;
ptg := PTOKEN_GROUPS(getmem(cbTokenGroups)); if not Assigned(ptg) then Exit;
if not GetTokenInformation(htkThread, // get groups TokenGroups, ptg, cbTokenGroups, cbTokenGroups) then Exit;
if not AllocateAndInitializeSid(SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin) then Exit;
iGroup := 0; while iGroup < ptg^.GroupCount do // check administrator group begin if EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then begin Result := TRUE; break; end; Inc(iGroup); end; FreeSid(psidAdmin); end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
GetLocalUserList - возвращает список пользователей (Windows NT, Windows 2000)
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Наверно так: хотя классов может быть больше
Code: |
procedure TForm1.Timer1Timer(Sender: TObject); {©Drkb v.3}
var Wnd : HWND; lpClassName: array [0..$FF] of Char; begin Wnd := WindowFromPoint(Mouse.CursorPos); GetClassName (Wnd, lpClassName, $FF); if ((strpas(lpClassName) = 'TEdit') or (strpas(lpClassName) = 'EDIT')) then PostMessage (Wnd, EM_SETPASSWORDCHAR, 0, 0); end; |
Автор ответа: Baa
Здесь проблема: если страница памяти защищена, то её нельзя прочитать таким способом, но можно заменить PasswordChar(пример: поле ввода пароля в удаленном соединении)
Автор ответа: Mikel
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
function OnSystemAccount(): Boolean; const cnMaxNameLen = 254; var sName: string; dwNameLen: DWORD; begin dwNameLen := cnMaxNameLen - 1; SetLength(sName, cnMaxNameLen); GetUserName(PChar(sName), dwNameLen); SetLength(sName, dwNameLen); if UpperCase(Trim(sName)) = 'SYSTEM' then Result := True else Result := False; end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
function GetUserFromWindows: string; var UserName : string; UserNameLen : Dword; begin UserNameLen := 255; SetLength(userName, UserNameLen); if GetUserName(PChar(UserName), UserNameLen) then Result := Copy(UserName,1,UserNameLen - 1) else Result := ''; end;
|
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
unit Unit1; {©Drkb v.3}
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
LPUSER_INFO_2 = ^USER_INFO_2; {$EXTERNALSYM LPUSER_INFO_2} PUSER_INFO_2 = ^USER_INFO_2; {$EXTERNALSYM PUSER_INFO_2} _USER_INFO_2 = record usri2_name: LPWSTR; usri2_password: LPWSTR; usri2_password_age: DWORD; usri2_priv: DWORD; usri2_home_dir: LPWSTR; usri2_comment: LPWSTR; usri2_flags: DWORD; usri2_script_path: LPWSTR; usri2_auth_flags: DWORD; usri2_full_name: LPWSTR; usri2_usr_comment: LPWSTR; usri2_parms: LPWSTR; usri2_workstations: LPWSTR; usri2_last_logon: DWORD; usri2_last_logoff: DWORD; usri2_acct_expires: DWORD; usri2_max_storage: DWORD; usri2_units_per_week: DWORD; usri2_logon_hours: PBYTE; usri2_bad_pw_count: DWORD; usri2_num_logons: DWORD; usri2_logon_server: LPWSTR; usri2_country_code: DWORD; usri2_code_page: DWORD; end; {$EXTERNALSYM _USER_INFO_2} USER_INFO_2 = _USER_INFO_2; {$EXTERNALSYM USER_INFO_2} TUserInfo2 = USER_INFO_2; PUserInfo2 = puser_info_2;
function NetUserAdd(ServerName: LPCWSTR; Level: DWORD; Buff: PByte; var Parm_Err: DWORD): DWORD; stdcall; external 'netapi32.dll';
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); const NERR_Success = 0; USER_PRIV_USER = 1; UF_SCRIPT = $0001; UF_DONT_EXPIRE_PASSWD = $10000; var UserInfo: TUserInfo2; Parm_Err: DWORD; begin ZeroMemory(@UserInfo, SizeOf(TUserInfo2)); UserInfo.usri2_name := 'TestUser'; UserInfo.usri2_password := '123'; UserInfo.usri2_priv := USER_PRIV_USER; UserInfo.usri2_flags := UF_SCRIPT or UF_DONT_EXPIRE_PASSWD; if NetUserAdd(nil, 2, @UserInfo, Parm_Err) <> NERR_Success then RaiseLastOSError else ShowMessage('Пользователь TestUser с паролем 123 успешно добавлен.'); end;
end. |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
SID-это структура данных переменной длины, которая идентифицирует пользователя, группу, и учетные записи компьютеров.
Каждой учетной записи в сети выдается уникальный идентификатор безопасности при первом создании учетной записи.
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Часто требуется организовать задержку в выполнении кода, но что бы при этому приложение не зависало, могло реагировать на сообщения Windows, в часности могло перерисовываться..
- Подробности
- Родительская категория: Windows
- Категория: Программирование без VCL, работа с WinAPI
Пример получения имени пользователя и домена под которым работает текущий поток или процесс.
Если вам необходимо получить только имя пользователя - используйте GetUserName. Данный пример можно использовать и для определения - запущен ли процесс
системой или пользователем. Учетной записи Localsystem соответствует имя пользователя - SYSTEM и домен NT AUTORITY (лучше проверить на практике).
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Вывод текста является одной из основных задач, которую приходится решать в программе при организации вывода данных. Речь пойдет о выводе текста с использованием Windows API функций. Данная статья, безусловно не претендует на полноту обзора этой тематики, но о некоторых "подводных камнях" я все же расскажу.
Функции, которые позволяют это выполнять, весьма разнообразны, и использовать их, как Вы уже поняли, можно в разных ситуациях и случаях, и собственно говоря, именно Вам и решать, какие использовать. Кроме функций, которые непосредственно выводят текст, также существует внушительный список "подсобных" функций.
- Подробности
- Родительская категория: Windows
- Категория: Программирование без VCL, работа с WinAPI
Страница 12 из 42