1 // Copyright (c) 2006-2008 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.
5 #include "sandbox/win/sandbox_poc/pocdll/exports.h"
6 #include "sandbox/win/sandbox_poc/pocdll/utils.h"
8 // This file contains the tests used to verify the security of the file system.
10 // Tries to open a file and outputs the result.
11 // "path" can contain environment variables.
12 // "output" is the stream for the logging.
13 void TryOpenFile(const wchar_t *path
, FILE *output
) {
14 wchar_t path_expanded
[MAX_PATH
] = {0};
15 DWORD size
= ::ExpandEnvironmentStrings(path
, path_expanded
, MAX_PATH
- 1);
17 fprintf(output
, "[ERROR] Cannot expand \"%S\". Error %ld.\r\n", path
,
22 file
= ::CreateFile(path_expanded
,
24 FILE_SHARE_READ
| FILE_SHARE_WRITE
| FILE_SHARE_DELETE
,
25 NULL
, // No security attributes
27 FILE_FLAG_BACKUP_SEMANTICS
,
30 if (file
&& INVALID_HANDLE_VALUE
!= file
) {
31 fprintf(output
, "[GRANTED] Opening file \"%S\". Handle 0x%p\r\n", path
,
35 fprintf(output
, "[BLOCKED] Opening file \"%S\". Error %ld.\r\n", path
,
40 void POCDLL_API
TestFileSystem(HANDLE log
) {
41 HandleToFile handle2file
;
42 FILE *output
= handle2file
.Translate(log
, "w");
44 TryOpenFile(L
"%SystemDrive%", output
);
45 TryOpenFile(L
"%SystemRoot%", output
);
46 TryOpenFile(L
"%ProgramFiles%", output
);
47 TryOpenFile(L
"%SystemRoot%\\System32", output
);
48 TryOpenFile(L
"%SystemRoot%\\explorer.exe", output
);
49 TryOpenFile(L
"%SystemRoot%\\Cursors\\arrow_i.cur", output
);
50 TryOpenFile(L
"%AllUsersProfile%", output
);
51 TryOpenFile(L
"%UserProfile%", output
);
52 TryOpenFile(L
"%Temp%", output
);
53 TryOpenFile(L
"%AppData%", output
);