Ваш протест, что производительность должна была бы контролироваться тщательно, будет верен независимо от решения, которое наконец улажено на. Нижняя строка - то, что процесс получения и сохранения контрольных данных собирается стоить Вам ресурсов (ввод-вывод, ЦП, устройство хранения данных, и т.д.).
Вы заявляете, что встроенный аудит Oracle совершил нападки больше всего, если не все Ваши требования. Почему альтернативу должны рассмотреть? Думайте о том, что Oracle потратила значительное усилие в оптимизации аудита людьми, которые знакомы с внутренностями Oracle. Я серьезно сомневаюсь, что большинство организаций имеет ресурсы, чтобы сделать это лучше. Если Вы, самокрутка, или даже идут с некоторым решением других производителей, ОЧЕНЬ подготовлены найти свой организационный аудит поддержки, вместо того, чтобы контролировать поддержку Вашей организации.
Если бы это был я, то я рекомендовал бы использовать встроенную технологию и при необходимости, создав что-то внутреннее, это имело дело с требованиями, у Вас есть тот Аудит Oracle, не удовлетворяет. Вы могли бы также рассмотреть, насколько важный такие требования действительно.
Тем не менее там существует много сторонних инструментов. Быстрый поиск Google приводит к нескольким возможностям. Я заметил один (Инструменты DB для Oracle) работы путем генерации триггеров для Вас.
Версия по умолчанию regedit.exe
в 64-битной ОС Windows - это 64-битная версия .
Исполняемый файл regedit находится в C: \ Windows \ SysWOW64
- это 32-разрядная версия, а исполняемый файл в C: \ Windows
- 64-разрядная версия.
Итак ... вот почему вы видите 32-битную версию при запуске из SysWOW64
. Потому что вы используете 32-битную версию. SysWOW64
- это место, где находится 32-разрядная версия и откуда она используется (поскольку она запускается 64-разрядной системой для обеспечения совместимости).
Вы можете проверить / проверить, какую версию regedit вы используете выполняется при наличии ключа Wow6432Node
в HKEY_LOCAL_MACHINE \ SOFTWARE
. Когда вы запускаете regedit из C: \ Windows
, этот узел будет существовать (он отображает 32-битную версию ваших ключей реестра). Если вы запустите regedit из C: \ Windows \ SysWOW64
, этого ключа не будет, потому что вы уже просматриваете 32-разрядный реестр.
C: \ Windows \ regedit.exe
< => 64-разрядная версия regedit.
C: \ Windows \ SysWOW64 \ regedit.exe
<=> 32-разрядная версия regedit.
В 64-битной Windows существует так называемое перенаправление файловой системы и реестра. Они существуют для совместимости со старыми приложениями, написанными для 32-битной Windows, и для приложений, разработанных для более старых версий Windows. WoW64 перехватывает все системные вызовы, сделанные 32-разрядными процессами, так что если мое 32-разрядное приложение, работающее в 64-разрядной версии Windows, вызывает C: \ Windows \ System32, WoW64 прозрачно перенаправит его на C: \ Windows \ SysWoW64, и т. д. Виртуальный каталог C: \ Windows \ Sysnative указывает на родную версию (64-разрядную версию) каталога, независимо от разрядности потока, ссылающегося на этот путь файловой системы.
Аналогичный механизм существует для реестра, и для этого и предназначен ключ WoW6432Node. Технически я бы назвал эти 32-битные и 64-битные представления реестра, если бы я хотел быть кратким ... Или педантичным.
Я написал код (на C #) не так давно для доступ к ключу в собственной (64-битной) части улья из 32-битного процесса. Вот сокращенный фрагмент:
// Accessing 64-bit registry key from 32-bit process
enum RegAccessFlag
{
NONE = 0,
KEY_QUERY_VALUE = 0x0001,
KEY_SET_VALUE = 0x0002,
KEY_CREATE_SUB_KEY = 0x0004,
KEY_ENUMERATE_SUB_KEYS = 0x0008,
KEY_NOTIFY = 0x0010,
KEY_CREATE_LINK = 0x0020,
KEY_WOW64_64KEY = 0x0100, // This is the ticket
KEY_WOW64_32KEY = 0x0200,
KEY_WOW64_RES = 0x0300
}
public static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0x80000002u);
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int RegOpenKeyEx(UIntPtr hkey, string subKey, int ulOptions, int samDesired, out UIntPtr hkResult);
static void Main(string[] args)
{
int statusCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, (int)RegAccessFlag.KEY_WOW64_64KEY | (int)RegAccessFlag.KEY_QUERY_VALUE, out hKey);
}
Конечно, вам все равно нужно прочитать значение из ключа после того, как вы его открыли, или создать новое значение, а затем не забудьте закрыть ключ, когда закончите, но это даст вам запускался, если вы хотели написать какой-либо код.
Но поскольку вы говорите о порождении 32-битного процесса из другого 32-битного процесса, чтобы этот дочерний процесс мог получить доступ к собственному представлению реестра на 64-битной платформе ... вы имеете дело с комбинацией перенаправления файловой системы и реестра, которые мешают вам. И в довершение всего, regedit.exe - своего рода специальная утилита в этом отношении.
TL; DR: Дайте C: \ Windows \ sysnative \ regedt32.exe
попробуйте вместо regedit.exe
.
https://stackoverflow.com/questions/12233396/open-64-bit-regedit-from-32-bit-application
Похоже, что "% systemroot% \ regedit.exe"
также выполняет какое-то перенаправление.
Начиная с Vista, это работает, когда вы используете 32-разрядную версию cmd
в 64-битной системе:
"%systemroot%\sysnative\cmd.exe" /c "%systemroot%\regedit.exe"