예제 #1
0
EXTERN_C NTSTATUS LogInitialization(_In_ ULONG Flag,
                                    _In_opt_ const wchar_t *LogFilePath,
                                    _In_opt_ PDEVICE_OBJECT DeviceObject) {
  PAGED_CODE();

  auto status = STATUS_SUCCESS;

  g_LogpDebugFlag = Flag;

  if (DeviceObject && !LogFilePath) {
    return STATUS_INVALID_PARAMETER;
  }

  // Initialize a log file if a log file path is specified.
  if (LogFilePath) {
    status = LogpInitializeBufferInfo(LogFilePath, DeviceObject,
                                      &g_LogpLogBufferInfo);
    if (!NT_SUCCESS(status)) {
      return status;
    }
  }

  // Test the log.
  status = LOG_INFO(
      "Log system was initialized (Flag= %08x, Buffer= %p %p, File= %S).", Flag,
      g_LogpLogBufferInfo.LogBuffer1, g_LogpLogBufferInfo.LogBuffer2,
      LogFilePath);
  if (!NT_SUCCESS(status)) {
    goto Fail;
  }
  return status;

Fail:
  if (LogFilePath) {
    LogpFinalizeBufferInfo(DeviceObject, &g_LogpLogBufferInfo);
  }
  return status;
}
예제 #2
0
_Use_decl_annotations_ NTSTATUS
LogInitialization(ULONG flag, const wchar_t *log_file_path) {
  PAGED_CODE();

  auto status = STATUS_SUCCESS;

  g_logp_debug_flag = flag;

  // Initialize a log file if a log file path is specified.
  bool need_reinitialization = false;
  if (log_file_path) {
    status = LogpInitializeBufferInfo(log_file_path, &g_logp_log_buffer_info);
    if (status == STATUS_REINITIALIZATION_NEEDED) {
      need_reinitialization = true;
    } else if (!NT_SUCCESS(status)) {
      return status;
    }
  }

  // Test the log.
  status = HYPERPLATFORM_LOG_INFO("Log has been %sinitialized.",
                                  (need_reinitialization ? "partially " : ""));
  if (!NT_SUCCESS(status)) {
    goto Fail;
  }
  HYPERPLATFORM_LOG_DEBUG("Info= %p, Buffer= %p %p, File= %S",
                          &g_logp_log_buffer_info,
                          g_logp_log_buffer_info.log_buffer1,
                          g_logp_log_buffer_info.log_buffer2, log_file_path);
  return (need_reinitialization ? STATUS_REINITIALIZATION_NEEDED
                                : STATUS_SUCCESS);

Fail:;
  if (log_file_path) {
    LogpFinalizeBufferInfo(&g_logp_log_buffer_info);
  }
  return status;
}