1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SANDBOX_SRC_WINDOW_H_
6#define SANDBOX_SRC_WINDOW_H_
7
8#include <windows.h>
9#include <string>
10
11#include "base/strings/string16.h"
12#include "sandbox/win/src/sandbox_types.h"
13
14namespace sandbox {
15
16  // Creates a window station. The name is generated by the OS. The security
17  // descriptor is based on the security descriptor of the current window
18  // station.
19  ResultCode CreateAltWindowStation(HWINSTA* winsta);
20
21  // Creates a desktop. The name is a static string followed by the pid of the
22  // current process. The security descriptor on the new desktop is based on the
23  // security descriptor of the desktop associated with the current thread.
24  // If a winsta is specified, the function will switch to it before creating
25  // the desktop. If the functions fails the switch back to the current winsta,
26  // the function will return SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION.
27  ResultCode CreateAltDesktop(HWINSTA winsta, HDESK* desktop);
28
29  // Returns the name of a desktop or a window station.
30  base::string16 GetWindowObjectName(HANDLE handle);
31
32  // Returns the name of the desktop referenced by |desktop|. If a window
33  // station is specified, the name is prepended with the window station name,
34  // followed by a backslash. This name can be used as the lpDesktop parameter
35  // to CreateProcess.
36  base::string16 GetFullDesktopName(HWINSTA winsta, HDESK desktop);
37
38}  // namespace sandbox
39
40#endif  // SANDBOX_SRC_WINDOW_H_
41