1 // Copyright 2013 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 #ifndef CHROME_ELF_BLACKLIST_BLACKLIST_H_
6 #define CHROME_ELF_BLACKLIST_BLACKLIST_H_
9 #include "sandbox/win/src/sandbox_nt_types.h"
14 // Max size of the DLL blacklist.
15 const size_t kTroublesomeDllsMaxCount
= 64;
18 extern const wchar_t* g_troublesome_dlls
[kTroublesomeDllsMaxCount
];
21 extern NtMapViewOfSectionFunction g_nt_map_view_of_section_func
;
24 // Attempts to leave a beacon in the current user's registry hive.
25 // If the blacklist beacon doesn't say it is enabled or there are any other
26 // errors when creating the beacon, returns false. Otherwise returns true.
27 // The intent of the beacon is to act as an extra failure mode protection
28 // whereby if Chrome for some reason fails to start during blacklist setup,
29 // it will skip blacklisting on the subsequent run.
30 bool LeaveSetupBeacon();
32 // Looks for the beacon that LeaveSetupBeacon() creates and resets it to
33 // to show the setup was successful.
34 // Returns true if the beacon was successfully set to BLACKLIST_ENABLED.
37 // Return the size of the current blacklist.
40 // Returns if true if the blacklist has been initialized.
41 extern "C" bool IsBlacklistInitialized();
43 // Adds the given dll name to the blacklist. Returns true if the dll name is in
44 // the blacklist when this returns, false on error. Note that this will copy
45 // |dll_name| and will leak it on exit if the string is not subsequently removed
46 // using RemoveDllFromBlacklist.
47 // Exposed for testing only, this shouldn't be exported from chrome_elf.dll.
48 extern "C" bool AddDllToBlacklist(const wchar_t* dll_name
);
50 // Removes the given dll name from the blacklist. Returns true if it was
51 // removed, false on error.
52 // Exposed for testing only, this shouldn't be exported from chrome_elf.dll.
53 extern "C" bool RemoveDllFromBlacklist(const wchar_t* dll_name
);
55 // Returns a list of all the dlls that have been successfully blocked by the
56 // blacklist via blocked_dlls, if there is enough space (according to |size|).
57 // |size| will always be modified to be the number of dlls that were blocked.
58 // The caller doesn't own the strings and isn't expected to free them. These
59 // strings won't be hanging unless RemoveDllFromBlacklist is called, but it
60 // is only exposed in tests (and should stay that way).
61 extern "C" void SuccessfullyBlocked(const wchar_t** blocked_dlls
, int* size
);
63 // Record that the dll at the given index was blocked.
64 void BlockedDll(size_t blocked_index
);
66 // Initializes the DLL blacklist in the current process. This should be called
67 // before any undesirable DLLs might be loaded. If |force| is set to true, then
68 // initialization will take place even if a beacon is present. This is useful
70 bool Initialize(bool force
);
72 } // namespace blacklist
74 #endif // CHROME_ELF_BLACKLIST_BLACKLIST_H_