Index: sandbox/win/src/target_process.cc |
diff --git a/sandbox/win/src/target_process.cc b/sandbox/win/src/target_process.cc |
index e0284c3924b27cd8f2419b7eda5ea3dd06471267..2af8917284b021fa47e78826eb4327ce40be99dc 100644 |
--- a/sandbox/win/src/target_process.cc |
+++ b/sandbox/win/src/target_process.cc |
@@ -5,6 +5,8 @@ |
#include "sandbox/win/src/target_process.h" |
#include "base/basictypes.h" |
+#include "base/debug/alias.h" |
+#include "base/debug/dump_without_crashing.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/win/pe_image.h" |
#include "base/win/startup_information.h" |
@@ -157,6 +159,10 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
NULL, // Use current directory of the caller. |
startup_info.startup_info(), |
&temp_process_info)) { |
+ // TODO(shrikant): Remove following code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(exe_path); |
+ base::debug::DumpWithoutCrashing(); |
return ::GetLastError(); |
} |
} else { |
@@ -182,6 +188,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
// Assign the suspended target to the windows job object. |
if (!::AssignProcessToJobObject(job_, process_info.process_handle())) { |
win_result = ::GetLastError(); |
+ if (set_lockdown_token_after_create) { |
+ // TODO(shrikant): Remove this code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(&win_result); |
+ base::debug::DumpWithoutCrashing(); |
+ } |
::TerminateProcess(process_info.process_handle(), 0); |
return win_result; |
} |
@@ -194,6 +206,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
HANDLE temp_thread = process_info.thread_handle(); |
if (!::SetThreadToken(&temp_thread, initial_token_.Get())) { |
win_result = ::GetLastError(); |
+ if (set_lockdown_token_after_create) { |
+ // TODO(shrikant): Remove this code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(&win_result); |
+ base::debug::DumpWithoutCrashing(); |
+ } |
// It might be a security breach if we let the target run outside the job |
// so kill it before it causes damage. |
::TerminateProcess(process_info.process_handle(), 0); |
@@ -217,6 +235,10 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
sizeof(process_access_token)); |
if (!NT_SUCCESS(status)) { |
win_result = ::GetLastError(); |
+ // TODO(shrikant): Remove this code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(&win_result); |
+ base::debug::DumpWithoutCrashing(); |
::TerminateProcess(process_info.process_handle(), 0); // exit code |
return win_result; |
} |
@@ -226,6 +248,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
context.ContextFlags = CONTEXT_ALL; |
if (!::GetThreadContext(process_info.thread_handle(), &context)) { |
win_result = ::GetLastError(); |
+ if (set_lockdown_token_after_create) { |
+ // TODO(shrikant): Remove this code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(&win_result); |
+ base::debug::DumpWithoutCrashing(); |
+ } |
::TerminateProcess(process_info.process_handle(), 0); |
return win_result; |
} |
@@ -242,6 +270,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path, |
if (!target_info->DuplicateFrom(process_info)) { |
win_result = ::GetLastError(); // This may or may not be correct. |
+ if (set_lockdown_token_after_create) { |
+ // TODO(shrikant): Remove this code once we gather some dumps for |
+ // debugging appcontainer related failures (crbug.com/467920). |
+ base::debug::Alias(&win_result); |
+ base::debug::DumpWithoutCrashing(); |
+ } |
::TerminateProcess(process_info.process_handle(), 0); |
return win_result; |
} |