| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/win/scoped_process_information.h" | 5 #include "base/win/scoped_process_information.h" |
| 6 #include "base/win/windows_version.h" | 6 #include "base/win/windows_version.h" |
| 7 #include "sandbox/win/src/sandbox.h" | 7 #include "sandbox/win/src/sandbox.h" |
| 8 #include "sandbox/win/src/sandbox_factory.h" | 8 #include "sandbox/win/src/sandbox_factory.h" |
| 9 #include "sandbox/win/src/sandbox_utils.h" | 9 #include "sandbox/win/src/sandbox_utils.h" |
| 10 #include "sandbox/win/src/target_services.h" | 10 #include "sandbox/win/src/target_services.h" |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 TargetPolicy* temp_policy = broker->CreatePolicy(); | 222 TargetPolicy* temp_policy = broker->CreatePolicy(); |
| 223 temp_policy->CreateAlternateDesktop(false); | 223 temp_policy->CreateAlternateDesktop(false); |
| 224 temp_policy->Release(); | 224 temp_policy->Release(); |
| 225 | 225 |
| 226 ASSERT_TRUE(broker != NULL); | 226 ASSERT_TRUE(broker != NULL); |
| 227 | 227 |
| 228 // Get the path to the sandboxed app. | 228 // Get the path to the sandboxed app. |
| 229 wchar_t prog_name[MAX_PATH]; | 229 wchar_t prog_name[MAX_PATH]; |
| 230 GetModuleFileNameW(NULL, prog_name, MAX_PATH); | 230 GetModuleFileNameW(NULL, prog_name, MAX_PATH); |
| 231 | 231 |
| 232 std::wstring arguments(L"\""); | 232 base::string16 arguments(L"\""); |
| 233 arguments += prog_name; | 233 arguments += prog_name; |
| 234 arguments += L"\" -child 0 wait"; // Don't care about the "state" argument. | 234 arguments += L"\" -child 0 wait"; // Don't care about the "state" argument. |
| 235 | 235 |
| 236 // Launch the app. | 236 // Launch the app. |
| 237 ResultCode result = SBOX_ALL_OK; | 237 ResultCode result = SBOX_ALL_OK; |
| 238 base::win::ScopedProcessInformation target; | 238 base::win::ScopedProcessInformation target; |
| 239 | 239 |
| 240 TargetPolicy* policy = broker->CreatePolicy(); | 240 TargetPolicy* policy = broker->CreatePolicy(); |
| 241 policy->SetAlternateDesktop(false); | 241 policy->SetAlternateDesktop(false); |
| 242 policy->SetTokenLevel(USER_INTERACTIVE, USER_LOCKDOWN); | 242 policy->SetTokenLevel(USER_INTERACTIVE, USER_LOCKDOWN); |
| 243 PROCESS_INFORMATION temp_process_info = {}; | 243 PROCESS_INFORMATION temp_process_info = {}; |
| 244 result = broker->SpawnTarget(prog_name, arguments.c_str(), policy, | 244 result = broker->SpawnTarget(prog_name, arguments.c_str(), policy, |
| 245 &temp_process_info); | 245 &temp_process_info); |
| 246 policy->Release(); | 246 policy->Release(); |
| 247 | 247 |
| 248 EXPECT_EQ(SBOX_ALL_OK, result); | 248 EXPECT_EQ(SBOX_ALL_OK, result); |
| 249 if (result == SBOX_ALL_OK) | 249 if (result == SBOX_ALL_OK) |
| 250 target.Set(temp_process_info); | 250 target.Set(temp_process_info); |
| 251 | 251 |
| 252 EXPECT_EQ(1, ::ResumeThread(target.thread_handle())); | 252 EXPECT_EQ(1, ::ResumeThread(target.thread_handle())); |
| 253 | 253 |
| 254 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(target.process_handle(), 2000)); | 254 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(target.process_handle(), 2000)); |
| 255 | 255 |
| 256 EXPECT_NE(::GetThreadDesktop(target.thread_id()), | 256 EXPECT_NE(::GetThreadDesktop(target.thread_id()), |
| 257 ::GetThreadDesktop(::GetCurrentThreadId())); | 257 ::GetThreadDesktop(::GetCurrentThreadId())); |
| 258 | 258 |
| 259 std::wstring desktop_name = policy->GetAlternateDesktop(); | 259 base::string16 desktop_name = policy->GetAlternateDesktop(); |
| 260 HDESK desk = ::OpenDesktop(desktop_name.c_str(), 0, FALSE, DESKTOP_ENUMERATE); | 260 HDESK desk = ::OpenDesktop(desktop_name.c_str(), 0, FALSE, DESKTOP_ENUMERATE); |
| 261 EXPECT_TRUE(NULL != desk); | 261 EXPECT_TRUE(NULL != desk); |
| 262 EXPECT_TRUE(::CloseDesktop(desk)); | 262 EXPECT_TRUE(::CloseDesktop(desk)); |
| 263 EXPECT_TRUE(::TerminateProcess(target.process_handle(), 0)); | 263 EXPECT_TRUE(::TerminateProcess(target.process_handle(), 0)); |
| 264 | 264 |
| 265 ::WaitForSingleObject(target.process_handle(), INFINITE); | 265 ::WaitForSingleObject(target.process_handle(), INFINITE); |
| 266 | 266 |
| 267 // Close the desktop handle. | 267 // Close the desktop handle. |
| 268 temp_policy = broker->CreatePolicy(); | 268 temp_policy = broker->CreatePolicy(); |
| 269 temp_policy->DestroyAlternateDesktop(); | 269 temp_policy->DestroyAlternateDesktop(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 285 TargetPolicy* temp_policy = broker->CreatePolicy(); | 285 TargetPolicy* temp_policy = broker->CreatePolicy(); |
| 286 temp_policy->CreateAlternateDesktop(true); | 286 temp_policy->CreateAlternateDesktop(true); |
| 287 temp_policy->Release(); | 287 temp_policy->Release(); |
| 288 | 288 |
| 289 ASSERT_TRUE(broker != NULL); | 289 ASSERT_TRUE(broker != NULL); |
| 290 | 290 |
| 291 // Get the path to the sandboxed app. | 291 // Get the path to the sandboxed app. |
| 292 wchar_t prog_name[MAX_PATH]; | 292 wchar_t prog_name[MAX_PATH]; |
| 293 GetModuleFileNameW(NULL, prog_name, MAX_PATH); | 293 GetModuleFileNameW(NULL, prog_name, MAX_PATH); |
| 294 | 294 |
| 295 std::wstring arguments(L"\""); | 295 base::string16 arguments(L"\""); |
| 296 arguments += prog_name; | 296 arguments += prog_name; |
| 297 arguments += L"\" -child 0 wait"; // Don't care about the "state" argument. | 297 arguments += L"\" -child 0 wait"; // Don't care about the "state" argument. |
| 298 | 298 |
| 299 // Launch the app. | 299 // Launch the app. |
| 300 ResultCode result = SBOX_ALL_OK; | 300 ResultCode result = SBOX_ALL_OK; |
| 301 base::win::ScopedProcessInformation target; | 301 base::win::ScopedProcessInformation target; |
| 302 | 302 |
| 303 TargetPolicy* policy = broker->CreatePolicy(); | 303 TargetPolicy* policy = broker->CreatePolicy(); |
| 304 policy->SetAlternateDesktop(true); | 304 policy->SetAlternateDesktop(true); |
| 305 policy->SetTokenLevel(USER_INTERACTIVE, USER_LOCKDOWN); | 305 policy->SetTokenLevel(USER_INTERACTIVE, USER_LOCKDOWN); |
| 306 PROCESS_INFORMATION temp_process_info = {}; | 306 PROCESS_INFORMATION temp_process_info = {}; |
| 307 result = broker->SpawnTarget(prog_name, arguments.c_str(), policy, | 307 result = broker->SpawnTarget(prog_name, arguments.c_str(), policy, |
| 308 &temp_process_info); | 308 &temp_process_info); |
| 309 policy->Release(); | 309 policy->Release(); |
| 310 | 310 |
| 311 EXPECT_EQ(SBOX_ALL_OK, result); | 311 EXPECT_EQ(SBOX_ALL_OK, result); |
| 312 if (result == SBOX_ALL_OK) | 312 if (result == SBOX_ALL_OK) |
| 313 target.Set(temp_process_info); | 313 target.Set(temp_process_info); |
| 314 | 314 |
| 315 EXPECT_EQ(1, ::ResumeThread(target.thread_handle())); | 315 EXPECT_EQ(1, ::ResumeThread(target.thread_handle())); |
| 316 | 316 |
| 317 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(target.process_handle(), 2000)); | 317 EXPECT_EQ(WAIT_TIMEOUT, ::WaitForSingleObject(target.process_handle(), 2000)); |
| 318 | 318 |
| 319 EXPECT_NE(::GetThreadDesktop(target.thread_id()), | 319 EXPECT_NE(::GetThreadDesktop(target.thread_id()), |
| 320 ::GetThreadDesktop(::GetCurrentThreadId())); | 320 ::GetThreadDesktop(::GetCurrentThreadId())); |
| 321 | 321 |
| 322 std::wstring desktop_name = policy->GetAlternateDesktop(); | 322 base::string16 desktop_name = policy->GetAlternateDesktop(); |
| 323 ASSERT_FALSE(desktop_name.empty()); | 323 ASSERT_FALSE(desktop_name.empty()); |
| 324 | 324 |
| 325 // Make sure there is a backslash, for the window station name. | 325 // Make sure there is a backslash, for the window station name. |
| 326 EXPECT_NE(desktop_name.find_first_of(L'\\'), std::wstring::npos); | 326 EXPECT_NE(desktop_name.find_first_of(L'\\'), base::string16::npos); |
| 327 | 327 |
| 328 // Isolate the desktop name. | 328 // Isolate the desktop name. |
| 329 desktop_name = desktop_name.substr(desktop_name.find_first_of(L'\\') + 1); | 329 desktop_name = desktop_name.substr(desktop_name.find_first_of(L'\\') + 1); |
| 330 | 330 |
| 331 HDESK desk = ::OpenDesktop(desktop_name.c_str(), 0, FALSE, DESKTOP_ENUMERATE); | 331 HDESK desk = ::OpenDesktop(desktop_name.c_str(), 0, FALSE, DESKTOP_ENUMERATE); |
| 332 // This should fail if the desktop is really on another window station. | 332 // This should fail if the desktop is really on another window station. |
| 333 EXPECT_FALSE(NULL != desk); | 333 EXPECT_FALSE(NULL != desk); |
| 334 EXPECT_TRUE(::TerminateProcess(target.process_handle(), 0)); | 334 EXPECT_TRUE(::TerminateProcess(target.process_handle(), 0)); |
| 335 | 335 |
| 336 ::WaitForSingleObject(target.process_handle(), INFINITE); | 336 ::WaitForSingleObject(target.process_handle(), INFINITE); |
| 337 | 337 |
| 338 // Close the desktop handle. | 338 // Close the desktop handle. |
| 339 temp_policy = broker->CreatePolicy(); | 339 temp_policy = broker->CreatePolicy(); |
| 340 temp_policy->DestroyAlternateDesktop(); | 340 temp_policy->DestroyAlternateDesktop(); |
| 341 temp_policy->Release(); | 341 temp_policy->Release(); |
| 342 } | 342 } |
| 343 | 343 |
| 344 } // namespace sandbox | 344 } // namespace sandbox |
| OLD | NEW |