atl80: Added AtlComModuleRegisterServer implementation (based on AtlModuleRegisterSer...
[wine] / dlls / sfc_os / sfc_os.c
1 /*
2  * Implementation of the System File Checker (Windows File Protection)
3  *
4  * Copyright 2006 Detlef Riekenberg
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include <stdarg.h>
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winerror.h"
26 #include "winreg.h"
27 #include "sfc.h"
28 #include "wine/debug.h"
29
30 WINE_DEFAULT_DEBUG_CHANNEL(sfc);
31
32 /******************************************************************
33  *      DllMain
34  */
35 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
36 {
37     TRACE("(%p, %d, %p)\n",hinstDLL, fdwReason, lpvReserved);
38
39     switch(fdwReason)
40     {
41         case DLL_WINE_PREATTACH:
42             return FALSE;           /* prefer native version */
43
44         case DLL_PROCESS_ATTACH:
45             DisableThreadLibraryCalls( hinstDLL );
46             break;
47     }
48     return TRUE;
49 }
50
51 /******************************************************************
52  *              SfcIsFileProtected     [sfc_os.@]
53  *
54  * Check, if the given File is protected by the System
55  *
56  * PARAMS
57  *  RpcHandle    [I] This must be NULL
58  *  ProtFileName [I] Filename with Path to check
59  *
60  * RETURNS
61  *  Failure: FALSE with GetLastError() != ERROR_FILE_NOT_FOUND
62  *  Success: TRUE, when the File is Protected
63  *           FALSE with GetLastError() == ERROR_FILE_NOT_FOUND,
64  *           when the File is not Protected
65  *
66  *
67  * BUGS
68  *  We return always the Result for: "File is not Protected"
69  *
70  */
71 BOOL WINAPI SfcIsFileProtected(HANDLE RpcHandle, LPCWSTR ProtFileName)
72 {
73     static BOOL reported = FALSE;
74
75     if (reported) {
76         TRACE("(%p, %s) stub\n", RpcHandle, debugstr_w(ProtFileName));
77     }
78     else
79     {
80         FIXME("(%p, %s) stub\n", RpcHandle, debugstr_w(ProtFileName));
81         reported = TRUE;
82     }
83
84     SetLastError(ERROR_FILE_NOT_FOUND);
85     return FALSE;
86 }
87
88 /******************************************************************
89  *              SfcIsKeyProtected     [sfc_os.@]
90  *
91  * Check, if the given Registry Key is protected by the System
92  *
93  * PARAMS
94  *  hKey          [I] Handle to the root registry key
95  *  lpSubKey      [I] Name of the subkey to check
96  *  samDesired    [I] The Registry View to Examine (32 or 64 bit)
97  *
98  * RETURNS
99  *  Failure: FALSE with GetLastError() != ERROR_FILE_NOT_FOUND
100  *  Success: TRUE, when the Key is Protected
101  *           FALSE with GetLastError() == ERROR_FILE_NOT_FOUND,
102  *           when the Key is not Protected
103  *
104  */
105 BOOL WINAPI SfcIsKeyProtected(HKEY hKey, LPCWSTR lpSubKey, REGSAM samDesired)
106 {
107     static BOOL reported = FALSE;
108
109     if (reported) {
110         TRACE("(%p, %s) stub\n", hKey, debugstr_w(lpSubKey));
111     }
112     else
113     {
114         FIXME("(%p, %s) stub\n", hKey, debugstr_w(lpSubKey));
115         reported = TRUE;
116     }
117
118     if( !hKey ) {
119         SetLastError(ERROR_INVALID_HANDLE);
120         return FALSE;
121     }
122
123     SetLastError(ERROR_FILE_NOT_FOUND);
124     return FALSE;
125 }