.


:




:

































 

 

 

 





RegEnumValue. dwIndex 0 . , , . , .

LONG RegEnumValue(HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcbValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)

, lpData. , lpcbData. , , lpType, , REG_BINARY, REG_DWORD, REG_SZ () REG_EXPAND_SZ ( , ). .

, , . ERROR_SUCCESS.

RegQueryValueEx , , , . , . , RegEnumValueEx.

RegSetValueEx, , , .

LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE * lpData, CONST cbData)

, RegDeleteValue.

:

lsReq ( 3.4), lsW ( 3.2, ) , "-" .

3.4. lsReq:

/* 3. lsReg: . 3.2. */

/* lsReg [] */

#include "EvryThng.h"

BOOL TraverseRegistry(HKEY, LPTSTR, LPTSTR, LPBOOL);

BOOL DisplayPair(LPTSTR, DWORD, LPBYTE, DWORD, LPBOOL);

BOOL DisplaySubKey (LPTSTR, LPTSTR, PFILETIME, LPBOOL);

 

int _tmain(int argc, LPTSTR argv[]) {

BOOL Flags[2], ok = TRUE;

TCHAR KeyName[MAX_PATH + 1];

LPTSTR pScan;

DWORD i, KeyIndex;

HKEY hKey, hNextKey;

/* . */

LPTSTR PreDefKeyNames[] = {

_("HKEY_LOCAL_MACHINE"), _T("HKEY_CLASSES_ROOT"),

_("HKEY CURRENT USER"), _T ("HKEY CURRENT CONFIG"), NULL

};

HKEY PreDefKeys[] = {

HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG

};

KeyIndex = Options(argc, argv, _T("Rl"), &Flags[0], &Flags[1], NULL);

/* "" "" "". */

/* . */

pScan = argv[KeyIndex];

for (i = 0; *pScan!= _T('\\') && *pScan!= _T('\0'); pScan++, i++) KeyName [i] = *pScan;

KeyName[i] = _T('\0');

if (*pScan == _T('\\')) pScan++;

/* HKEY.*/

for (i = 0; PreDefKeyNames [i]!= NULL && _tcscmp(PreDefKeyNames[i], KeyName)!= 0; i++);

hKey = PreDefKeys[i];

RegOpenKeyEx(hKey, pScan, 0, KEY_READ, &hNextKey);

hKey = hNextKey;

ok = TraverseRegistry(hKey, argv[KeyIndex], NULL, Flags);

return ok? 0: 1;

}

 

BOOL TraverseRegistry(HKEY hKey, LPTSTR FullKeyName, LPTSTR SubKey, LPBOOL Flags)

/* , R.*/

{

HKEY hSubK;

BOOL Recursive = Flags[0];

LONG Result;

DWORD ValType, Index, NumSubKs, SubKNameLen, ValNameLen, ValLen;

DWORD MaxSubKLen, NumVals, MaxValNameLen, MaxValLen;

FILETIME LastWriteTime;

LPTSTR SubKName, ValName;

LPBYTE Val;

TCHAR FullSubKName[MAX_PATH + 1];

/* . */

RegOpenKeyEx(hKey, SubKey, 0, KEY_READ, &hSubK);

/* . */

RegQueryInfoKey(hSubK, NULL, NULL, NULL, &NumSubKs, &MaxSubKLen, NULL, &NumVals, &MaxValNameLen, &MaxValLen, NULL, &LastWriteTime);

SubKName = malloc (MaxSubKLen+1); /* . */

ValName = malloc(MaxValNameLen+1); /* . */

Val = malloc(MaxValLen); /* . */

/* : "-". */

for (Index = 0; Index < NumVals; Index++) {

ValNameLen = MaxValNameLen + 1; /* ! */

ValLen = MaxValLen + 1;

RegEnumValue(hSubK, Index, ValName, &ValNameLen, NULL, &ValType, Val, &ValLen);

DisplayPair(ValName, ValType, Val, ValLen, Flags);

}

/* : . */

for (Index = 0; Index < NumSubKs; Index++) {

SubKNameLen = MaxSubKLen + 1;

RegEnumKeyEx(hSubK, Index, SubKName, &SubKNameLen, NULL, NULL, NULL, &LastWriteTime);

DisplaySubKey(FullKName, SubKName, &LastWriteTime, Flags);

if (Recursive) {

_stprintf(FullSubKName, _T("%s\\%s"), FullKName, SubKName);

TraverseRegistry(hSubK, FullSubKName, SubKName, Flags);

}

}

_tprintf(_T("\n"));

free(SubKName);

free(ValName);

free(Val);

RegCloseKey(hSubK);

return TRUE;

}

 

BOOL DisplayPair(LPTSTR ValueName, DWORD ValueType, LPBYTE Value, DWORD ValueLen, LPBOOL Flags)

/* , "-". */

{

LPBYTE pV = Value;

DWORD i;

_tprintf(_T("\nValue: %s = "), ValueName);

switch (ValueType) {

case REG_FULL_RESOURCE_DESCRIPTOR: /* 9: . */

case REG_BINARY: /* 3: . */

for (i = 0; i < ValueLen; i++, pV++) _tprintf (_T (" %x"), *pV);

break;

case REG_DWORD: /* 4: 32- . */

_tprintf(_T ("%x"), (DWORD)*Value);

break;

case REG_MULTI SZ: /*7: , .*/

case REG_SZ: /* 1: , . */

_tprintf(_T("%s"), (LPTSTR)Value);

break;

/* */

}

return TRUE;

}

 

BOOL DisplaySubKey(LPTSTR KeyName, LPTSTR SubKeyName, PFILETIME pLastWrite, LPBOOL Flags) {

BOOL Long = Flags[1];

SYSTEMTIME SysLastWrite;

_tprintf(_T("\nSubkey: %s"), KeyName);

if (_tcslen(SubKeyName) > 0) _tprintf (_T ("\\%s "), SubKeyName);

if (Long) {

FileTimeToSystemTime(pLastWrite, &SysLastWrite);

_tprintf(_T("%02d/%02d/%04d %02d:%02d:%02d"), SysLastWrite.wMonth, SysLastWrite.wDay, SysLastWrite.wYear, SysLastWrite.wHour, SysLastWrite.wMinute, SysLastWrite.wSecond);

}

return TRUE;

}

2 3 , , /. . , .

/, / . , Windows , UNIX .

Windows, UNIX , , , .





:


: 2015-09-20; !; : 599 |


:

:

, .
==> ...

1279 - | 1245 -


© 2015-2024 lektsii.org - -

: 0.021 .