Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

703 lines
19 KiB

  1. // LoggedRegIntercept.cpp: implementation of the CLoggedRegIntercept class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "LoggedRegIntercept.h"
  5. #include <winioctl.h>
  6. #include "..\reghandle\reghandle.h"
  7. #include "LogEntry.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CLoggedRegIntercept::CLoggedRegIntercept(TCHAR* FileName)
  12. : m_pDllName(NULL)
  13. {
  14. m_LogFile = _tfopen(FileName, L"wt");
  15. }
  16. CLoggedRegIntercept::~CLoggedRegIntercept()
  17. {
  18. fclose(m_LogFile);
  19. }
  20. #define LOG(X) _fputts(X, m_LogFile);
  21. #define LOGN(X) _fputts(X L"\n", m_LogFile);
  22. #define LOGNL() _fputts(L"\n", m_LogFile);
  23. void CLoggedRegIntercept::LOGSTR(LPCTSTR ValueName, LPCTSTR Value)
  24. {
  25. _ftprintf(m_LogFile, TEXT(" (%s: %s)"), ValueName, Value);
  26. }
  27. /*
  28. void CLoggedRegIntercept::LOGKEY(HANDLE key)
  29. {
  30. TCHAR buf[256];
  31. buf[0] = 0;
  32. //* switch ((int)key)
  33. {
  34. case HKEY_LOCAL_MACHINE:
  35. _tcscpy(buf, L"HKEY_LOCAL_MACHINE");
  36. break;
  37. case HKEY_CLASSES_ROOT:
  38. _tcscpy(buf, L"HKEY_CLASSES_ROOT");
  39. break;
  40. case HKEY_CURRENT_CONFIG:
  41. _tcscpy(buf, L"HKEY_CURRENT_CONFIG");
  42. break;
  43. case HKEY_CURRENT_USER:
  44. _tcscpy(buf, L"HKEY_CURRENT_USER");
  45. break;
  46. case HKEY_USERS:
  47. _tcscpy(buf, L"HKEY_USERS");
  48. break;
  49. case HKEY_PERFORMANCE_DATA:
  50. _tcscpy(buf, L"HKEY_PERFORMANCE_DATA");
  51. break;
  52. };
  53. if (buf[0] != 0)
  54. _ftprintf(m_LogFile, L" (Key: %s)", buf);
  55. else
  56. WCHAR mybuf[2048];
  57. mybuf[0]=0;
  58. HANDLE hReg = key;
  59. DWORD nb;
  60. if (DeviceIoControl(m_RegDevice.hDevice,
  61. IOCTL_REGMON_GETOBJECT,
  62. &hReg, sizeof(hReg), mybuf,
  63. sizeof(mybuf), &nb, NULL ))
  64. {
  65. _tprintf(L" (Key: %u)", key);
  66. _tprintf(L"handle returned: %s\n", mybuf);
  67. }
  68. else
  69. {
  70. printf("bad error deviceiocontrol\n");
  71. }
  72. _ftprintf(m_LogFile, TEXT(" (Key: %u)"), key);
  73. }
  74. */
  75. void CLoggedRegIntercept::SetCurrentDll(LPCTSTR DllName)
  76. {
  77. m_pDllName = DllName;
  78. }
  79. void CLoggedRegIntercept::LogError(LPCTSTR msg)
  80. {
  81. _ftprintf(m_LogFile, TEXT("***Error: %s\n"), msg);
  82. }
  83. /*
  84. bool CLoggedRegIntercept::GetTempKeyName(HANDLE key)
  85. {
  86. m_TempKeyName[0] = NULL;
  87. if ((key == 0) || (key == INVALID_HANDLE_VALUE))
  88. return true;
  89. HANDLE hReg = key;
  90. DWORD nb;
  91. if (DeviceIoControl(m_RegDevice.hDevice,
  92. IOCTL_REGMON_GETOBJECT,
  93. &hReg, sizeof(hReg), m_TempKeyName,
  94. sizeof(m_TempKeyName), &nb, NULL ))
  95. {
  96. int len = _tcslen(m_TempKeyName);
  97. if (m_TempKeyName[len-1] != L'\\')
  98. _tcscat(m_TempKeyName, L"\\");
  99. return true;
  100. }
  101. else
  102. {
  103. return false;
  104. }
  105. return CRegIntercept::GetHandleName(key, m_TempKeyName);
  106. }
  107. */
  108. /*
  109. void CLoggedRegIntercept::GetHandleName(HANDLE obj)
  110. {
  111. GetTempKeyName(obj);
  112. }*/
  113. void CLoggedRegIntercept::GetLocation(POBJECT_ATTRIBUTES ObjectAttributes, bool bAppendBackslash)
  114. {
  115. m_TempKeyName[0] = NULL;
  116. if (ObjectAttributes != NULL)
  117. {
  118. if (ObjectAttributes->RootDirectory == 0)
  119. {
  120. _tcscpy(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  121. if (bAppendBackslash)
  122. AppendBackSlash(m_TempKeyName);
  123. }
  124. else
  125. {
  126. GetHandleName(ObjectAttributes->RootDirectory, m_TempKeyName, true);
  127. //sets m_TempKeyName to the actual name of the root key handle
  128. _tcscat(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  129. if (bAppendBackslash)
  130. AppendBackSlash(m_TempKeyName);
  131. }
  132. }
  133. }
  134. void CLoggedRegIntercept::NtOpenKey(PHANDLE KeyHandle,
  135. ACCESS_MASK DesiredAccess,
  136. POBJECT_ATTRIBUTES ObjectAttributes)
  137. {
  138. /* LOG(TEXT("NtOpenKey"));
  139. LOGKEY(ObjectAttributes->RootDirectory);
  140. LOGSTR(TEXT("SubKey"), (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  141. LOGKEY(*KeyHandle);
  142. LOGNL();
  143. */
  144. /*
  145. if (ObjectAttributes->RootDirectory == 0)
  146. _tcscpy(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  147. else
  148. {
  149. GetTempKeyName(ObjectAttributes->RootDirectory);
  150. //sets m_TempKeyName to the actual name of the root key handle
  151. _tcscat(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  152. }
  153. */
  154. GetLocation(ObjectAttributes);
  155. CLogEntry le(m_pDllName, L"NtOpenKey", m_TempKeyName);
  156. le.WriteToFile(m_LogFile);
  157. }
  158. void CLoggedRegIntercept::NtCreateKey(PHANDLE KeyHandle,
  159. ACCESS_MASK DesiredAccess,
  160. POBJECT_ATTRIBUTES ObjectAttributes,
  161. ULONG TitleIndex,
  162. PUNICODE_STRING Class,
  163. ULONG CreateOptions,
  164. PULONG Disposition)
  165. {
  166. /*
  167. LOG(L"NtCreateKey");
  168. LOGKEY(ObjectAttributes->RootDirectory);
  169. LOGSTR(L"SubKey", (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  170. LOGKEY(*KeyHandle);
  171. LOGNL();
  172. */
  173. /* if (ObjectAttributes->RootDirectory == 0)
  174. _tcscpy(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  175. else
  176. {
  177. GetTempKeyName(ObjectAttributes->RootDirectory);
  178. //sets m_TempKeyName to the actual name of the root key handle
  179. _tcscat(m_TempKeyName, (LPWSTR)ObjectAttributes->ObjectName->Buffer);
  180. }
  181. */
  182. GetLocation(ObjectAttributes);
  183. CLogEntry le(m_pDllName, L"NtCreateKey", m_TempKeyName);
  184. le.WriteToFile(m_LogFile);
  185. }
  186. void CLoggedRegIntercept::NtDeleteKey(HANDLE KeyHandle)
  187. {
  188. GetHandleName(KeyHandle, m_TempKeyName);
  189. CLogEntry le(m_pDllName, L"NtDeleteKey", m_TempKeyName, NULL);
  190. le.WriteToFile(m_LogFile);
  191. }
  192. void CLoggedRegIntercept::NtDeleteValueKey(HANDLE KeyHandle, PUNICODE_STRING ValueName)
  193. {
  194. GetHandleName(KeyHandle, m_TempKeyName);
  195. CLogEntry le(m_pDllName, L"NtDeleteValueKey", m_TempKeyName, ValueName->Buffer);
  196. le.WriteToFile(m_LogFile);
  197. }
  198. void CLoggedRegIntercept::NtEnumerateKey(HANDLE KeyHandle, ULONG Index, KEY_INFORMATION_CLASS KeyInformationClass, PVOID KeyInformation, ULONG Length, PULONG ResultLength)
  199. {
  200. GetHandleName(KeyHandle, m_TempKeyName);
  201. CLogEntry le(m_pDllName, L"NtEnumerateKey", m_TempKeyName, NULL);
  202. le.WriteToFile(m_LogFile);
  203. }
  204. void CLoggedRegIntercept::NtEnumerateValueKey(HANDLE KeyHandle, ULONG Index, KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, PVOID KeyValueInformation, ULONG Length, PULONG ResultLength)
  205. {
  206. GetHandleName(KeyHandle, m_TempKeyName);
  207. CLogEntry le(m_pDllName, L"NtEnumerateValueKey", m_TempKeyName, NULL);
  208. le.WriteToFile(m_LogFile);
  209. }
  210. void CLoggedRegIntercept::NtQueryKey(HANDLE KeyHandle, KEY_INFORMATION_CLASS KeyInformationClass, PVOID KeyInformation, ULONG Length, PULONG ResultLength)
  211. {
  212. GetHandleName(KeyHandle, m_TempKeyName);
  213. CLogEntry le(m_pDllName, L"NtQueryKey", m_TempKeyName, NULL);
  214. le.WriteToFile(m_LogFile);
  215. }
  216. void CLoggedRegIntercept::NtQueryValueKey(HANDLE KeyHandle, PUNICODE_STRING ValueName, KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, PVOID KeyValueInformation, ULONG Length, PULONG ResultLength)
  217. {
  218. GetHandleName(KeyHandle, m_TempKeyName);
  219. CLogEntry le(m_pDllName, L"NtQueryValueKey", m_TempKeyName, ValueName->Buffer);
  220. le.WriteToFile(m_LogFile);
  221. }
  222. void CLoggedRegIntercept::NtQueryMultipleValueKey(HANDLE KeyHandle, PKEY_VALUE_ENTRY ValueEntries, ULONG EntryCount, PVOID ValueBuffer, PULONG BufferLength, PULONG RequiredBufferLength)
  223. {
  224. GetHandleName(KeyHandle, m_TempKeyName);
  225. CLogEntry le(m_pDllName, L"NtQueryMultipleValueKey", m_TempKeyName, NULL);
  226. le.WriteToFile(m_LogFile);
  227. }
  228. void CLoggedRegIntercept::NtSetValueKey(HANDLE KeyHandle, PUNICODE_STRING ValueName, ULONG TitleIndex, ULONG Type, PVOID Data, ULONG DataSize)
  229. {
  230. GetHandleName(KeyHandle, m_TempKeyName);
  231. CLogEntry le(m_pDllName, L"NtSetValueKey", m_TempKeyName, ValueName->Buffer);
  232. le.WriteToFile(m_LogFile);
  233. }
  234. //intercepted File System functions
  235. void CLoggedRegIntercept::NtDeleteFile(POBJECT_ATTRIBUTES ObjectAttributes)
  236. {
  237. GetLocation(ObjectAttributes, false);
  238. CLogEntry le(m_pDllName, L"NtDeleteFile", m_TempKeyName);
  239. le.WriteToFile(m_LogFile);
  240. }
  241. void CLoggedRegIntercept::NtQueryAttributesFile(POBJECT_ATTRIBUTES ObjectAttributes, PFILE_BASIC_INFORMATION FileInformation)
  242. {
  243. GetLocation(ObjectAttributes, false);
  244. CLogEntry le(m_pDllName, L"NtQueryAttributesFile", m_TempKeyName);
  245. le.WriteToFile(m_LogFile);
  246. }
  247. void CLoggedRegIntercept::NtQueryFullAttributesFile(POBJECT_ATTRIBUTES ObjectAttributes, PFILE_NETWORK_OPEN_INFORMATION FileInformation)
  248. {
  249. GetLocation(ObjectAttributes, false);
  250. CLogEntry le(m_pDllName, L"NtQueryFullAttributesFile", m_TempKeyName);
  251. le.WriteToFile(m_LogFile);
  252. }
  253. void CLoggedRegIntercept::NtCreateFile(
  254. PHANDLE FileHandle,
  255. ACCESS_MASK DesiredAccess,
  256. POBJECT_ATTRIBUTES ObjectAttributes,
  257. PIO_STATUS_BLOCK IoStatusBlock,
  258. PLARGE_INTEGER AllocationSize,
  259. ULONG FileAttributes,
  260. ULONG ShareAccess,
  261. ULONG CreateDisposition,
  262. ULONG CreateOptions,
  263. PVOID EaBuffer,
  264. ULONG EaLength)
  265. {
  266. GetLocation(ObjectAttributes, false);
  267. CLogEntry le(m_pDllName, L"NtCreateFile", m_TempKeyName);
  268. le.WriteToFile(m_LogFile);
  269. }
  270. void CLoggedRegIntercept::NtOpenFile(
  271. PHANDLE FileHandle,
  272. ACCESS_MASK DesiredAccess,
  273. POBJECT_ATTRIBUTES ObjectAttributes,
  274. PIO_STATUS_BLOCK IoStatusBlock,
  275. ULONG ShareAccess,
  276. ULONG OpenOptions)
  277. {
  278. GetLocation(ObjectAttributes, false);
  279. CLogEntry le(m_pDllName, L"NtOpenFile", m_TempKeyName);
  280. le.WriteToFile(m_LogFile);
  281. }
  282. //intercepted Driver functions
  283. void CLoggedRegIntercept::NtLoadDriver(PUNICODE_STRING DriverServiceName)
  284. {
  285. CLogEntry le(m_pDllName, L"NtLoadDriver", DriverServiceName ? DriverServiceName->Buffer: 0);
  286. le.WriteToFile(m_LogFile);
  287. }
  288. /*
  289. void CLoggedRegIntercept::NtDeviceIoControlFile(
  290. HANDLE FileHandle,
  291. HANDLE Event,
  292. PIO_APC_ROUTINE ApcRoutine,
  293. PVOID ApcContext,
  294. PIO_STATUS_BLOCK IoStatusBlock,
  295. ULONG IoControlCode,
  296. PVOID InputBuffer,
  297. ULONG InputBufferLength,
  298. PVOID OutputBuffer,
  299. ULONG OutputBufferLength)
  300. {
  301. GetHandleName(KeyHandle);
  302. CLogEntry le(m_pDllName, L"NtDeviceIoControlFile", m_TempKeyName);
  303. le.WriteToFile(m_LogFile);
  304. }
  305. void CLoggedRegIntercept::NtFsControlFile(
  306. HANDLE FileHandle,
  307. HANDLE Event,
  308. PIO_APC_ROUTINE ApcRoutine,
  309. PVOID ApcContext,
  310. PIO_STATUS_BLOCK IoStatusBlock,
  311. ULONG FsControlCode,
  312. PVOID InputBuffer,
  313. ULONG InputBufferLength,
  314. PVOID OutputBuffer,
  315. ULONG OutputBufferLength)
  316. {
  317. }
  318. */
  319. void CLoggedRegIntercept::NtPlugPlayControl(
  320. IN PLUGPLAY_CONTROL_CLASS PnPControlClass,
  321. IN OUT PVOID PnPControlData,
  322. IN ULONG PnPControlDataLength)
  323. {
  324. CLogEntry le(m_pDllName, L"NtPlugPlayControl");
  325. le.WriteToFile(m_LogFile);
  326. }
  327. void CLoggedRegIntercept::NtCreateSymbolicLinkObject(
  328. OUT PHANDLE LinkHandle,
  329. IN ACCESS_MASK DesiredAccess,
  330. IN POBJECT_ATTRIBUTES ObjectAttributes,
  331. IN PUNICODE_STRING LinkTarget)
  332. {
  333. GetLocation(ObjectAttributes, false);
  334. CLogEntry le(m_pDllName, L"NtCreateSymbolicLinkObject", m_TempKeyName);
  335. le.WriteToFile(m_LogFile);
  336. }
  337. void CLoggedRegIntercept::NtOpenSymbolicLinkObject(
  338. OUT PHANDLE LinkHandle,
  339. IN ACCESS_MASK DesiredAccess,
  340. IN POBJECT_ATTRIBUTES ObjectAttributes)
  341. {
  342. GetLocation(ObjectAttributes, false);
  343. CLogEntry le(m_pDllName, L"NtOpenSymbolicLinkObject", m_TempKeyName);
  344. le.WriteToFile(m_LogFile);
  345. }
  346. void CLoggedRegIntercept::NtCreateDirectoryObject(
  347. OUT PHANDLE DirectoryHandle,
  348. IN ACCESS_MASK DesiredAccess,
  349. IN POBJECT_ATTRIBUTES ObjectAttributes)
  350. {
  351. GetLocation(ObjectAttributes);
  352. CLogEntry le(m_pDllName, L"NtCreateDirectoryObject", m_TempKeyName);
  353. le.WriteToFile(m_LogFile);
  354. }
  355. void CLoggedRegIntercept::NtOpenDirectoryObject(
  356. OUT PHANDLE DirectoryHandle,
  357. IN ACCESS_MASK DesiredAccess,
  358. IN POBJECT_ATTRIBUTES ObjectAttributes)
  359. {
  360. GetLocation(ObjectAttributes);
  361. CLogEntry le(m_pDllName, L"NtOpenDirectoryObject", m_TempKeyName);
  362. le.WriteToFile(m_LogFile);
  363. }
  364. void CLoggedRegIntercept::NtSignalAndWaitForSingleObject(
  365. IN HANDLE SignalHandle,
  366. IN HANDLE WaitHandle,
  367. IN BOOLEAN Alertable,
  368. IN PLARGE_INTEGER Timeout)
  369. {
  370. CLogEntry le(m_pDllName, L"NtSignalAndWaitForSingleObject");
  371. le.WriteToFile(m_LogFile);
  372. }
  373. void CLoggedRegIntercept::NtWaitForSingleObject(
  374. IN HANDLE Handle,
  375. IN BOOLEAN Alertable,
  376. IN PLARGE_INTEGER Timeout)
  377. {
  378. CLogEntry le(m_pDllName, L"NtWaitForSingleObject");
  379. le.WriteToFile(m_LogFile);
  380. }
  381. void CLoggedRegIntercept::NtWaitForMultipleObjects(
  382. IN ULONG Count,
  383. IN HANDLE* Handles,
  384. IN WAIT_TYPE WaitType,
  385. IN BOOLEAN Alertable,
  386. IN PLARGE_INTEGER Timeout)
  387. {
  388. CLogEntry le(m_pDllName, L"NtWaitForMultipleObjects");
  389. le.WriteToFile(m_LogFile);
  390. }
  391. void CLoggedRegIntercept::NtCreatePort(
  392. OUT PHANDLE PortHandle,
  393. IN POBJECT_ATTRIBUTES ObjectAttributes,
  394. IN ULONG MaxConnectionInfoLength,
  395. IN ULONG MaxMessageLength,
  396. IN ULONG MaxPoolUsage)
  397. {
  398. GetLocation(ObjectAttributes, false);
  399. CLogEntry le(m_pDllName, L"NtCreatePort", m_TempKeyName);
  400. le.WriteToFile(m_LogFile);
  401. }
  402. void CLoggedRegIntercept::NtCreateWaitablePort(
  403. OUT PHANDLE PortHandle,
  404. IN POBJECT_ATTRIBUTES ObjectAttributes,
  405. IN ULONG MaxConnectionInfoLength,
  406. IN ULONG MaxMessageLength,
  407. IN ULONG MaxPoolUsage)
  408. {
  409. GetLocation(ObjectAttributes, false);
  410. CLogEntry le(m_pDllName, L"NtCreateWaitablePort", m_TempKeyName);
  411. le.WriteToFile(m_LogFile);
  412. }
  413. void CLoggedRegIntercept::NtCreateThread(
  414. OUT PHANDLE ThreadHandle,
  415. IN ACCESS_MASK DesiredAccess,
  416. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  417. IN HANDLE ProcessHandle,
  418. OUT PCLIENT_ID ClientId,
  419. IN PCONTEXT ThreadContext,
  420. IN PINITIAL_TEB InitialTeb,
  421. IN BOOLEAN CreateSuspended)
  422. {
  423. CLogEntry le(m_pDllName, L"NtCreateThread");
  424. le.WriteToFile(m_LogFile);
  425. }
  426. void CLoggedRegIntercept::NtOpenThread(
  427. OUT PHANDLE ThreadHandle,
  428. IN ACCESS_MASK DesiredAccess,
  429. IN POBJECT_ATTRIBUTES ObjectAttributes,
  430. IN PCLIENT_ID ClientId)
  431. {
  432. CLogEntry le(m_pDllName, L"NtOpenThread");
  433. le.WriteToFile(m_LogFile);
  434. }
  435. void CLoggedRegIntercept::NtCreateProcess(
  436. OUT PHANDLE ProcessHandle,
  437. IN ACCESS_MASK DesiredAccess,
  438. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  439. IN HANDLE ParentProcess,
  440. IN BOOLEAN InheritObjectTable,
  441. IN HANDLE SectionHandle OPTIONAL,
  442. IN HANDLE DebugPort OPTIONAL,
  443. IN HANDLE ExceptionPort OPTIONAL)
  444. {
  445. GetLocation(ObjectAttributes, false);
  446. CLogEntry le(m_pDllName, L"NtCreateProcess");
  447. le.WriteToFile(m_LogFile);
  448. }
  449. void CLoggedRegIntercept::NtCreateProcessEx(
  450. OUT PHANDLE ProcessHandle,
  451. IN ACCESS_MASK DesiredAccess,
  452. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  453. IN HANDLE ParentProcess,
  454. IN ULONG Flags,
  455. IN HANDLE SectionHandle OPTIONAL,
  456. IN HANDLE DebugPort OPTIONAL,
  457. IN HANDLE ExceptionPort OPTIONAL,
  458. IN ULONG JobMemberLevel)
  459. {
  460. GetLocation(ObjectAttributes, false);
  461. CLogEntry le(m_pDllName, L"NtCreateProcessEx", m_TempKeyName);
  462. le.WriteToFile(m_LogFile);
  463. }
  464. void CLoggedRegIntercept::NtOpenProcess(
  465. OUT PHANDLE ProcessHandle,
  466. IN ACCESS_MASK DesiredAccess,
  467. IN POBJECT_ATTRIBUTES ObjectAttributes,
  468. IN PCLIENT_ID ClientId OPTIONAL)
  469. {
  470. GetLocation(ObjectAttributes, false);
  471. CLogEntry le(m_pDllName, L"NtOpenProcess", m_TempKeyName);
  472. le.WriteToFile(m_LogFile);
  473. }
  474. void CLoggedRegIntercept::NtQueryDefaultLocale(
  475. IN BOOLEAN UserProfile,
  476. OUT PLCID DefaultLocaleId)
  477. {
  478. CLogEntry le(m_pDllName, L"NtQueryDefaultLocale");
  479. le.WriteToFile(m_LogFile);
  480. }
  481. void CLoggedRegIntercept::NtSetDefaultLocale(
  482. IN BOOLEAN UserProfile,
  483. IN LCID DefaultLocaleId)
  484. {
  485. CLogEntry le(m_pDllName, L"NtSetDefaultLocale");
  486. le.WriteToFile(m_LogFile);
  487. }
  488. void CLoggedRegIntercept::NtQuerySystemEnvironmentValue(
  489. IN PUNICODE_STRING VariableName,
  490. OUT PWSTR VariableValue,
  491. IN USHORT ValueLength,
  492. OUT PUSHORT ReturnLength OPTIONAL)
  493. {
  494. CLogEntry le(m_pDllName, L"NtQuerySystemEnvironmentValue", VariableName ? VariableName->Buffer : 0);
  495. le.WriteToFile(m_LogFile);
  496. }
  497. void CLoggedRegIntercept::NtSetSystemEnvironmentValue(
  498. IN PUNICODE_STRING VariableName,
  499. IN PUNICODE_STRING VariableValue)
  500. {
  501. CLogEntry le(m_pDllName, L"NtSetSystemEnvironmentValue",VariableName ? VariableName->Buffer : 0);
  502. le.WriteToFile(m_LogFile);
  503. }
  504. void CLoggedRegIntercept::NtQuerySystemEnvironmentValueEx(
  505. IN PUNICODE_STRING VariableName,
  506. IN LPGUID VendorGuid,
  507. OUT PVOID Value,
  508. IN OUT PULONG ValueLength,
  509. OUT PULONG Attributes OPTIONAL)
  510. {
  511. CLogEntry le(m_pDllName, L"NtQuerySystemEnvironmentValueEx",VariableName ? VariableName->Buffer : 0);
  512. le.WriteToFile(m_LogFile);
  513. }
  514. void CLoggedRegIntercept::NtSetSystemEnvironmentValueEx(
  515. IN PUNICODE_STRING VariableName,
  516. IN LPGUID VendorGuid,
  517. IN PVOID Value,
  518. IN ULONG ValueLength,
  519. IN ULONG Attributes)
  520. {
  521. CLogEntry le(m_pDllName, L"NtSetSystemEnvironmentValueEx", VariableName ? VariableName->Buffer : 0);
  522. le.WriteToFile(m_LogFile);
  523. }
  524. void CLoggedRegIntercept::NtEnumerateSystemEnvironmentValuesEx(
  525. IN ULONG InformationClass,
  526. OUT PVOID Buffer,
  527. IN OUT PULONG BufferLength)
  528. {
  529. CLogEntry le(m_pDllName, L"NtEnumerateSystemEnvironmentValuesEx");
  530. le.WriteToFile(m_LogFile);
  531. }
  532. void CLoggedRegIntercept::NtQuerySystemTime(
  533. OUT PLARGE_INTEGER SystemTime)
  534. {
  535. CLogEntry le(m_pDllName, L"NtQuerySystemTime");
  536. le.WriteToFile(m_LogFile);
  537. }
  538. void CLoggedRegIntercept::NtSetSystemTime(
  539. IN PLARGE_INTEGER SystemTime,
  540. OUT PLARGE_INTEGER PreviousTime OPTIONAL)
  541. {
  542. CLogEntry le(m_pDllName, L"NtSetSystemTime");
  543. le.WriteToFile(m_LogFile);
  544. }
  545. void CLoggedRegIntercept::NtQuerySystemInformation(
  546. IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
  547. OUT PVOID SystemInformation,
  548. IN ULONG SystemInformationLength,
  549. OUT PULONG ReturnLength OPTIONAL)
  550. {
  551. CLogEntry le(m_pDllName, L"NtQuerySystemInformation");
  552. le.WriteToFile(m_LogFile);
  553. }
  554. void CLoggedRegIntercept::NtSetSystemInformation(
  555. IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
  556. IN PVOID SystemInformation,
  557. IN ULONG SystemInformationLength)
  558. {
  559. CLogEntry le(m_pDllName, L"NtSetSystemInformation");
  560. le.WriteToFile(m_LogFile);
  561. }
  562. void CLoggedRegIntercept::NtQueryInformationFile(
  563. IN HANDLE FileHandle,
  564. OUT PIO_STATUS_BLOCK IoStatusBlock,
  565. OUT PVOID FileInformation,
  566. IN ULONG Length,
  567. IN FILE_INFORMATION_CLASS FileInformationClass)
  568. {
  569. GetHandleName(FileHandle, m_TempKeyName, false);
  570. CLogEntry le(m_pDllName, L"NtQueryInformationFile", m_TempKeyName);
  571. le.WriteToFile(m_LogFile);
  572. }
  573. void CLoggedRegIntercept::NtSetInformationFile(
  574. IN HANDLE FileHandle,
  575. OUT PIO_STATUS_BLOCK IoStatusBlock,
  576. IN PVOID FileInformation,
  577. IN ULONG Length,
  578. IN FILE_INFORMATION_CLASS FileInformationClass)
  579. {
  580. GetHandleName(FileHandle, m_TempKeyName, false);
  581. CLogEntry le(m_pDllName, L"NtSetInformationFile", m_TempKeyName);
  582. le.WriteToFile(m_LogFile);
  583. }