indentation
[oweals/gnunet.git] / src / include / winproc.h
1 /*
2      This file is part of GNUnet.
3      (C) 2001, 2002, 2003, 2004, 2005 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 2, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * @file include/winproc.h
23  * @brief Definitions for MS Windows
24  * @author Nils Durner
25  */
26
27 #ifndef _WINPROC_H
28 #define _WINPROC_H
29
30 #include <io.h>
31 #include <stdio.h>
32 #include <sys/types.h>
33 #include <sys/stat.h>
34 #include <sys/timeb.h>
35 #include <time.h>
36 #include <dirent.h>
37 #include <winsock2.h>
38 #include <ws2tcpip.h>
39 #include <windows.h>
40 #include <winerror.h>
41 #include <iphlpapi.h>
42 #include <shlobj.h>
43 #include <objbase.h>
44 #include <sys/param.h>          /* #define BYTE_ORDER */
45 #include <ntsecapi.h>
46 #include <lm.h>
47 #include <aclapi.h>
48
49
50 #ifdef __cplusplus
51 extern "C"
52 {
53 #endif
54
55 #ifndef MAX_NAME_LENGTH
56 #define MAX_NAME_LENGTH 25
57 #endif
58
59   typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG, PULONG);
60   typedef DWORD WINAPI (*TGetIfEntry) (PMIB_IFROW pIfRow);
61   typedef DWORD WINAPI (*TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable,
62                                            PULONG pdwSize, BOOL bOrder);
63   typedef DWORD WINAPI (*TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize,
64                                        BOOL bOrder);
65   typedef DWORD WINAPI (*TCreateHardLink) (LPCTSTR lpFileName,
66                                            LPCTSTR lpExistingFileName,
67                                            LPSECURITY_ATTRIBUTES
68                                            lpSecurityAttributes);
69   typedef SC_HANDLE WINAPI (*TOpenSCManager) (LPCTSTR lpMachineName,
70                                               LPCTSTR lpDatabaseName,
71                                               DWORD dwDesiredAccess);
72   typedef SC_HANDLE WINAPI (*TCreateService) (SC_HANDLE hSCManager,
73                                               LPCTSTR lpServiceName,
74                                               LPCTSTR lpDisplayName,
75                                               DWORD dwDesiredAccess,
76                                               DWORD dwServiceType,
77                                               DWORD dwStartType,
78                                               DWORD dwErrorControl,
79                                               LPCTSTR lpBinaryPathName,
80                                               LPCTSTR lpLoadOrderGroup,
81                                               LPDWORD lpdwTagId,
82                                               LPCTSTR lpDependencies,
83                                               LPCTSTR lpServiceStartName,
84                                               LPCTSTR lpPassword);
85   typedef BOOL WINAPI (*TCloseServiceHandle) (SC_HANDLE hSCObject);
86   typedef BOOL WINAPI (*TDeleteService) (SC_HANDLE hService);
87   typedef SERVICE_STATUS_HANDLE WINAPI (*TRegisterServiceCtrlHandler) (LPCTSTR
88                                                                        lpServiceName,
89                                                                        LPHANDLER_FUNCTION
90                                                                        lpHandlerProc);
91   typedef BOOL WINAPI (*TSetServiceStatus) (SERVICE_STATUS_HANDLE
92                                             hServiceStatus,
93                                             LPSERVICE_STATUS lpServiceStatus);
94   typedef BOOL WINAPI (*TStartServiceCtrlDispatcher) (const
95                                                       LPSERVICE_TABLE_ENTRY
96                                                       lpServiceTable);
97   typedef BOOL WINAPI (*TControlService) (SC_HANDLE hService, DWORD dwControl,
98                                           LPSERVICE_STATUS lpServiceStatus);
99   typedef SC_HANDLE WINAPI (*TOpenService) (SC_HANDLE hSCManager,
100                                             LPCTSTR lpServiceName,
101                                             DWORD dwDesiredAccess);
102   typedef DWORD WINAPI (*TGetBestInterface) (IPAddr dwDestAddr,
103                                              PDWORD pdwBestIfIndex);
104   typedef DWORD WINAPI (*TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo,
105                                             PULONG pOutBufLen);
106   typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE, PDWORD);
107   typedef NET_API_STATUS WINAPI (*TNetUserSetInfo) (LPCWSTR servername,
108                                                     LPCWSTR username,
109                                                     DWORD level, LPBYTE buf,
110                                                     LPDWORD parm_err);
111   typedef NTSTATUS NTAPI (*TLsaOpenPolicy) (PLSA_UNICODE_STRING,
112                                             PLSA_OBJECT_ATTRIBUTES,
113                                             ACCESS_MASK, PLSA_HANDLE);
114   typedef NTSTATUS NTAPI (*TLsaAddAccountRights) (LSA_HANDLE, PSID,
115                                                   PLSA_UNICODE_STRING, ULONG);
116   typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID,
117                                                      BOOLEAN,
118                                                      PLSA_UNICODE_STRING,
119                                                      ULONG);
120   typedef NTSTATUS NTAPI (*TLsaClose) (LSA_HANDLE);
121   typedef BOOL WINAPI (*TLookupAccountName) (LPCTSTR lpSystemName,
122                                              LPCTSTR lpAccountName, PSID Sid,
123                                              LPDWORD cbSid,
124                                              LPTSTR ReferencedDomainName,
125                                              LPDWORD cchReferencedDomainName,
126                                              PSID_NAME_USE peUse);
127
128   typedef BOOL WINAPI (*TGetFileSecurity) (LPCTSTR lpFileName,
129                                            SECURITY_INFORMATION
130                                            RequestedInformation,
131                                            PSECURITY_DESCRIPTOR
132                                            pSecurityDescriptor, DWORD nLength,
133                                            LPDWORD lpnLengthNeeded);
134   typedef BOOL WINAPI (*TInitializeSecurityDescriptor) (PSECURITY_DESCRIPTOR
135                                                         pSecurityDescriptor,
136                                                         DWORD dwRevision);
137   typedef BOOL WINAPI (*TGetSecurityDescriptorDacl) (PSECURITY_DESCRIPTOR
138                                                      pSecurityDescriptor,
139                                                      LPBOOL lpbDaclPresent,
140                                                      PACL * pDacl,
141                                                      LPBOOL lpbDaclDefaulted);
142   typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl,
143                                              LPVOID pAclInformation,
144                                              DWORD nAclInformationLength,
145                                              ACL_INFORMATION_CLASS
146                                              dwAclInformationClass);
147   typedef BOOL WINAPI (*TInitializeAcl) (PACL pAcl, DWORD nAclLength,
148                                          DWORD dwAclRevision);
149   typedef BOOL WINAPI (*TGetAce) (PACL pAcl, DWORD dwAceIndex, LPVOID * pAce);
150   typedef BOOL WINAPI (*TEqualSid) (PSID pSid1, PSID pSid2);
151   typedef BOOL WINAPI (*TAddAce) (PACL pAcl, DWORD dwAceRevision,
152                                   DWORD dwStartingAceIndex, LPVOID pAceList,
153                                   DWORD nAceListLength);
154   typedef BOOL WINAPI (*TAddAccessAllowedAce) (PACL pAcl, DWORD dwAceRevision,
155                                                DWORD AccessMask, PSID pSid);
156   typedef BOOL WINAPI (*TSetNamedSecurityInfo) (LPTSTR pObjectName,
157                                                 SE_OBJECT_TYPE ObjectType,
158                                                 SECURITY_INFORMATION
159                                                 SecurityInfo, PSID psidOwner,
160                                                 PSID psidGroup, PACL pDacl,
161                                                 PACL pSacl);
162
163   extern TNtQuerySystemInformation GNNtQuerySystemInformation;
164   extern TGetIfEntry GNGetIfEntry;
165   extern TGetIpAddrTable GNGetIpAddrTable;
166   extern TGetIfTable GNGetIfTable;
167   extern TCreateHardLink GNCreateHardLink;
168   extern TOpenSCManager GNOpenSCManager;
169   extern TCreateService GNCreateService;
170   extern TCloseServiceHandle GNCloseServiceHandle;
171   extern TDeleteService GNDeleteService;
172   extern TRegisterServiceCtrlHandler GNRegisterServiceCtrlHandler;
173   extern TSetServiceStatus GNSetServiceStatus;
174   extern TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher;
175   extern TControlService GNControlService;
176   extern TOpenService GNOpenService;
177   extern TGetBestInterface GNGetBestInterface;
178   extern TGetAdaptersInfo GGetAdaptersInfo;
179   extern TNetUserAdd GNNetUserAdd;
180   extern TNetUserSetInfo GNNetUserSetInfo;
181   extern TLsaOpenPolicy GNLsaOpenPolicy;
182   extern TLsaAddAccountRights GNLsaAddAccountRights;
183   extern TLsaRemoveAccountRights GNLsaRemoveAccountRights;
184   extern TLsaClose GNLsaClose;
185   extern TLookupAccountName GNLookupAccountName;
186   extern TGetFileSecurity GNGetFileSecurity;
187   extern TInitializeSecurityDescriptor GNInitializeSecurityDescriptor;
188   extern TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl;
189   extern TGetAclInformation GNGetAclInformation;
190   extern TInitializeAcl GNInitializeAcl;
191   extern TGetAce GNGetAce;
192   extern TEqualSid GNEqualSid;
193   extern TAddAce GNAddAce;
194   extern TAddAccessAllowedAce GNAddAccessAllowedAce;
195   extern TSetNamedSecurityInfo GNSetNamedSecurityInfo;
196
197
198   BOOL CreateShortcut (const char *pszSrc, const char *pszDest);
199   BOOL DereferenceShortcut (char *pszShortcut);
200   long QueryRegistry (HKEY hMainKey, const char *pszKey, const char *pszSubKey,
201                       char *pszBuffer, long *pdLength);
202   int ListNICs (void (*callback) (void *, const char *, int), void *cls);
203   BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName,
204                             DWORD dwAccessMask);
205   char *winErrorStr (const char *prefix, int dwErr);
206   void EnumNICs (PMIB_IFTABLE * pIfTable, PMIB_IPADDRTABLE * pAddrTable);
207   int GNInitWinEnv ();
208   void GNShutdownWinEnv ();
209
210 #ifdef __cplusplus
211 }
212 #endif
213
214 #endif