Доступ - Определение даты создания лок.уч.записи

Ответить
Аватара пользователя
Mukovar

Доступ - Определение даты создания лок.уч.записи

Сообщение Mukovar »

Господа! Как определить дату/время локальной учетной записи. Именно локальной, а не глобальной. Дата создания папки профиля пользователя не подходит, он мог зайти позже.....Вот такая задачка!
Аватара пользователя
Mukovar

Re: Доступ - Определение даты создания лок.уч.записи

Сообщение Mukovar »

Локальные учетные записи хранятся в базе SAM, которая в свою очередь хранится в реестре поэтому логично предположить что дата создания пользователя должна соответствовать дате создания ключа "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\UserName". Это можно организовать через API-функции... если устроит, могу привести скрипт на AutoIT.



З.Ы. ИМХО проще не забывать включать штатные средства аудита.
Аватара пользователя
Mukovar

Re: Доступ - Определение даты создания лок.уч.записи

Сообщение Mukovar »

Версия очень интересная!!! Обязательно посмотрю ветку. А если учетка удаляется, то и запись в реестре тоже соотвественно удаляется? За скрипт на AutoIT был бы признателен!!!
Аватара пользователя
Mukovar

Re: Доступ - Определение даты создания лок.уч.записи

Сообщение Mukovar »

Цитата Mukovar:



если учетка удаляется, то и запись в реестре тоже соотвественно удаляется?
Доступ - Определение даты создания лок.уч.записи




логично Изображение


Цитата Mukovar:



За скрипт на AutoIT был бы признателен
Доступ - Определение даты создания лок.уч.записи






Код:

Код: Выделить всё

$UserName = $CmdLine[$CmdLine[0]]
$sRegKey = 'SAM\SAM\Domains\Account\Users\Names\' & $UserName
MsgBox(64,'Дата создания учетной записи', RegGetTimeStamp(0x80000002, $sRegKey))
Func RegGetTimeStamp($iRegHive, $sRegKey)
    Local $sRes='', $aRet, $hReg = DllStructCreate("int")
    Local $FILETIME = DllStructCreate("dword;dword")
    Local $SYSTEMTIME1 = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
    Local $SYSTEMTIME2 = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
    Local $hAdvAPI=DllOpen('advapi32.dll'), $hKernel=DllOpen('kernel32.dll')
    If $hAdvAPI=-1 Or $hKernel=-1 Then Return SetError(1, $aRet[0], 'DLL Open Error!')
    $aRet = DllCall("advapi32.dll", "int", "RegOpenKeyEx", _
        "int", $iRegHive, "str", $sRegKey, _
        "int", 0, "int", 0x20019, _
        "ptr", DllStructGetPtr($hReg))
    If $aRet[0] Then Return SetError(2, $aRet[0], 'Registry Key Open Error!')
    $aRet = DllCall("advapi32.dll", "int", "RegQueryInfoKey", _
        "int", DllStructGetData($hReg,1), _
        "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, _
        "ptr", DllStructGetPtr($FILETIME))
    If $aRet[0] Then Return SetError(3, $aRet[0], 'Registry Key Query Error!')
    $aRet = DllCall("advapi32.dll", "int", "RegCloseKey", _
        "int", DllStructGetData($hReg,1))
    If $aRet[0] Then Return SetError(4, $aRet[0], 'Registry Key Close Error!')
    $aRet = DllCall("kernel32.dll", "int", "FileTimeToSystemTime", _
        "ptr", DllStructGetPtr($FILETIME), _
        "ptr", DllStructGetPtr($SYSTEMTIME1))
    If $aRet[0]=0 Then Return SetError(5, 0, 'Time Convert Error!')
    $aRet = DllCall("kernel32.dll", "int", "SystemTimeToTzSpecificLocalTime", _
        "ptr", 0, _
        "ptr", DllStructGetPtr($SYSTEMTIME1), _
        "ptr", DllStructGetPtr($SYSTEMTIME2))
    If $aRet[0]=0 Then Return SetError(5, 0, 'Time Convert Error!')
    $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,4)) &'.'
     $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,2)) &'.'
     $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,1)) &' '
     $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,5)) &':'
     $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,6)) &':'
     $sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,7))
    Return $sRes
EndFunc

Запускать нужно с системной учетной записью, например при помощи
PsExec
, командная строка для скомпилированного скрипта:

Код:

Код: Выделить всё

psexec.exe -s -i script.exe UserName
Ответить

Вернуться в «Microsoft Windows 2000/XP»