|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Коллеги, доброе время суток. Возникла необходимость сбора информации о размере журналов безопасности на n-ном (примерно 300-500) количестве компьютеров в сети. На локальном ПК эта информации (о размере журнала безопасности) хранится в этой ветке реестра : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security , параметр содержащий значение : MaxSize С локального компьютера информацию об этой ветке реестра можно получить таким образом : Код: sql 1. 2. 3. 4. 5. 6. 7.
Но как это сделать для удаленного ПК - не представляю... Собственно вопрос - каким образом, средствами VB, эту информацию можно достать из реестра удаленного ПК ? Или, быть может, существует какой-либо другой способ получить информацию о размере журнала безопсности чужого ПК (не обращаясь к его реестру) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 10:09 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
RegConnectRegistry ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 14:14 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Antonariy - благодарю за то, что подсказал в каком направлении копать. Получилась вот что : "Объявление функций/констант для работы с удаленным реестром" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
"Процедура получения значения параметра из ветки удаленного реестра" Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Если запустить эту процедуру, то она выводит на экран значение параметра file в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security , то есть директорию, в которой хранится журнал безопасности Windows. В той же ветке реестра есть параметр MaxSize - он-то и содержит информацию, которая мне необходима (заданный размер журнала безопасности)! Но с помощью этой процедуры я не могу получить значение этого параметра. Когда я пытаюсь получить значение параметра MaxSize с помощью этой процедуры - в переменную sValue (в неё записывается значение параметра во время выполнения функции RegQueryValueExString) записывается какая-то билибирда (смотрю через Debug -> Add Wath). Странно. Обратил внимание, что параметры реестра типа "REG_SZ" (т.е. строковые) выгружаются вполне себе корректно, а вот "REG_DWORD" (32-ти битные, числовые) выдают какую-то кракозябру. Нет ли мыслей - почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 16:32 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Да, в строке lRet = RegConnectRegistry("\\172.19.23.114", HKEY_LOCAL_MACHINE, hRemoteReg) в качестве ПК, к реестру которого подключаюсь - указываю IP своей ПК. Т.е. если кто-то захочет запустить процедуру у себя - айпишник нужно поменять на твой (или прописать туда имя компа). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 16:41 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
furiousangel256а вот "REG_DWORD" (32-ти битные, числовые) выдают какую-то кракозябру. Нет ли мыслей - почему? А по подробнее? Кракозябры разные бывают ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 16:56 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Да, конечно. Если подоброее - выглядит это так : При получении значения типа REG_SZ всё вроде бы проходит гладко. В переменную sValue записывается значение параметра file из это ветки реестра, потом значение переменной отображается на экране через msgbox. При получении значения типа REG_DWORD всё иначе. Функция получения инфы из реестра отрабатывает, в переменную sValue что-то записывается, но что - непонятно. И то, что туда записалось - не хочет выводиться в msgbox, через дебагер тоже непонятно что такое записалось в переменную... В общем это я и называю кракозяброй =/ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 17:30 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Потому что dword это числовой, а не текстовый тип. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 17:55 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
> Автор: furiousangel256 > В общем это я и называю кракозяброй =/ Ты путаешь кислое с красным :) Кракозяблы - это неправильная кодировка текста, а то что ты показываешь - это непечатаемые символы у которых есть код. Получить его можно с помощью Asc(символ). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 17:57 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
AntonariyПотому что dword это числовой, а не текстовый тип. Логично. Но если мы сделаем так : Код: sql 1. 2. 3. 4.
то переменной b присвоится значение "6" и никаких проблем не будет вот я и не могу понять - почему этого не происходит сейчас? и главное - что с этим делать? Игорь Горбонос Ты путаешь кислое с красным :) Кракозяблы - это неправильная кодировка текста, а то что ты показываешь - это непечатаемые символы у которых есть код. Получить его можно с помощью Asc(символ). Разобрал получившееся значение с помощью функции asc, получилось, что первые 4 символа имеют код 0, а все оставшиеся (их много) имеют код 32 (это, по-моему, пробел) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 18:17 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
furiousangel256AntonariyПотому что dword это числовой, а не текстовый тип. Логично. Но если мы сделаем так : Код: sql 1. 2. 3. 4.
то переменной b присвоится значение "6" и никаких проблем не будетКак все запущено. Мне сейчас некогда объяснять подробно. Просто копируй из реестра в числовую переменную, а не текстовую, а потом делай b = a и никаких проблем не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2012, 19:22 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
[quot Antonariy]furiousangel256пропущено... Просто копируй из реестра в числовую переменную, а не текстовую, а потом делай b = a и никаких проблем не будет. Я пробовал сделать это первым же делом. Когда я беру из реестра переменную типа REG_DWORD (32-битное числовое значение) и копирую в переменную типа Integer - то ничего не происходит. Значение переменной в VB не изменяется. Как был 0 - так и остался 0. Сдаётся мне, что работать с числовыми переменными в реестре нужно как-то по-другому =/ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2012, 14:35 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Long нужно, а не Integer. И исходный код вместо этого вашего "ничего не происходит". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2012, 15:54 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Antonariy, long я тоже пробовал А код не сильно отличается от того, что указан выше : + =Код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
Модератор: для правильного отображения кода надо писать SRC VBA, а не просто SRC ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2012, 17:07 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
на rsdn нашёл первый же пример: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2012, 17:53 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
furiousangel256Antonariy, long я тоже пробовал А код не сильно отличается от того, что указан выше : Ну и где там long? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2012, 18:07 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Antonariy, не понял вопрос... Переменная sValue у меня объявляется как переменная типа long Код: vbnet 1.
В теле процедуры она объявляется последней по счёту. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2012, 10:16 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
А функция объявлена с lpData As String. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2012, 12:20 |
|
Получение информации о размере журнала безопасности удаленного ПК средствами VB
|
|||
---|---|---|---|
#18+
Посыпаю голову пеплом. Я и забыл про то, как я функцию объявлял... Разумеется в этом и было всё дело. Теперь ЭТО работает! :-) Примного благодарен всем, кто оказывал мне помощь в решении проблемы (Antonariy - Вам, разумеется, благодарен больше всех). На тот случай, если кто-нибудь столкнётся с такой же проблемой - вот код, который позволяет получить информацию о размере журнала безопасности Windows (да и вообще любого журнала - разница лишь в том, в какой ветке реестра его смотреть) Код [src vba] Private Const HKEY_CLASSES_ROOT = &H80000000 Private Const HKEY_CURRENT_USER = &H80000001 Private Const HKEY_LOCAL_MACHINE = &H80000002 Private Const HKEY_USERS = &H80000003 Private Const KEY_QUERY_VALUE = &H1 Private Const KEY_SET_VALUE = &H2 Private Const KEY_ALL_ACCESS = &H3F Private Const REG_SZ As Long = 1 Private Const REG_DWORD As Long = 4 Private Const ERROR_SUCCESS = 0& Private Declare Function RegConnectRegistry Lib "advapi32.dll" _ Alias "RegConnectRegistryA" _ (ByVal lpMachineName As String, _ ByVal hKey As Long, _ phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" _ (ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As Long) As Long Private Declare Function RegQueryValueExString Lib "advapi32.dll" _ Alias "RegQueryValueExA" _ (ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ ByRef lpType As Long, _ ByRef lpData As Long, _ ByRef lpcbData As Long) As Long Sub Registry() Dim hRemoteReg As Long Dim lRet As Variant Dim lRetVal As Long Dim hKey As Long Dim sValue As Long lRet = RegConnectRegistry("\\127.0.0.1", _ HKEY_LOCAL_MACHINE, _ hRemoteReg) lRetVal = RegOpenKeyEx(hRemoteReg, _ "SYSTEM\CurrentControlSet\Services\Eventlog\Security", 0, KEY_QUERY_VALUE, hKey) If lRetVal <> ERROR_SUCCESS Then MsgBox "Cannot open key" Else lRetVal = RegQueryValueExString(hKey, _ "MaxSize", 0&, REG_DWORD, sValue, 255) If lRetVal <> ERROR_SUCCESS Then MsgBox "Cannot query value" Else MsgBox sValue End If lRetVal = RegCloseKey(hKey) If lRetVal <> ERROR_SUCCESS Then MsgBox "Cannot close key" End If End If End Sub [src vba] ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2012, 17:13 |
|
|
start [/forum/topic.php?fid=60&msg=37814676&tid=2157752]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 159ms |
0 / 0 |