wip
[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,
60                                                      PULONG);
61   typedef DWORD WINAPI (*TGetIfEntry) (PMIB_IFROW pIfRow);
62   typedef DWORD WINAPI (*TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable,
63                                            PULONG pdwSize, BOOL bOrder);
64   typedef DWORD WINAPI (*TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize,
65                                        BOOL bOrder);
66   typedef DWORD WINAPI (*TCreateHardLink) (LPCTSTR lpFileName,
67                                            LPCTSTR lpExistingFileName,
68                                            LPSECURITY_ATTRIBUTES
69                                            lpSecurityAttributes);
70   typedef SC_HANDLE WINAPI (*TOpenSCManager) (LPCTSTR lpMachineName,
71                                               LPCTSTR lpDatabaseName,
72                                               DWORD dwDesiredAccess);
73   typedef SC_HANDLE WINAPI (*TCreateService) (SC_HANDLE hSCManager,
74                                               LPCTSTR lpServiceName,
75                                               LPCTSTR lpDisplayName,
76                                               DWORD dwDesiredAccess,
77                                               DWORD dwServiceType,
78                                               DWORD dwStartType,
79                                               DWORD dwErrorControl,
80                                               LPCTSTR lpBinaryPathName,
81                                               LPCTSTR lpLoadOrderGroup,
82                                               LPDWORD lpdwTagId,
83                                               LPCTSTR lpDependencies,
84                                               LPCTSTR lpServiceStartName,
85                                               LPCTSTR lpPassword);
86   typedef BOOL WINAPI (*TCloseServiceHandle) (SC_HANDLE hSCObject);
87   typedef BOOL WINAPI (*TDeleteService) (SC_HANDLE hService);
88   typedef SERVICE_STATUS_HANDLE WINAPI (*TRegisterServiceCtrlHandler) (LPCTSTR
89                                                                        lpServiceName,
90                                                                        LPHANDLER_FUNCTION
91                                                                        lpHandlerProc);
92   typedef BOOL WINAPI (*TSetServiceStatus) (SERVICE_STATUS_HANDLE
93                                             hServiceStatus,
94                                             LPSERVICE_STATUS lpServiceStatus);
95   typedef BOOL WINAPI (*TStartServiceCtrlDispatcher) (const
96                                                       LPSERVICE_TABLE_ENTRY
97                                                       lpServiceTable);
98   typedef BOOL WINAPI (*TControlService) (SC_HANDLE hService, DWORD dwControl,
99                                           LPSERVICE_STATUS lpServiceStatus);
100   typedef SC_HANDLE WINAPI (*TOpenService) (SC_HANDLE hSCManager,
101                                             LPCTSTR lpServiceName,
102                                             DWORD dwDesiredAccess);
103   typedef DWORD WINAPI (*TGetBestInterface) (IPAddr dwDestAddr,
104                                              PDWORD pdwBestIfIndex);
105   typedef DWORD WINAPI (*TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo,
106                                             PULONG pOutBufLen);
107   typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE,
108                                                 PDWORD);
109   typedef NET_API_STATUS WINAPI (*TNetUserSetInfo) (LPCWSTR servername,
110                                                     LPCWSTR username,
111                                                     DWORD level, LPBYTE buf,
112                                                     LPDWORD parm_err);
113   typedef NTSTATUS NTAPI (*TLsaOpenPolicy) (PLSA_UNICODE_STRING,
114                                             PLSA_OBJECT_ATTRIBUTES,
115                                             ACCESS_MASK, PLSA_HANDLE);
116   typedef NTSTATUS NTAPI (*TLsaAddAccountRights) (LSA_HANDLE, PSID,
117                                                   PLSA_UNICODE_STRING, ULONG);
118   typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID,
119                                                      BOOLEAN,
120                                                      PLSA_UNICODE_STRING,
121                                                      ULONG);
122   typedef NTSTATUS NTAPI (*TLsaClose) (LSA_HANDLE);
123   typedef BOOL WINAPI (*TLookupAccountName) (LPCTSTR lpSystemName,
124                                              LPCTSTR lpAccountName, PSID Sid,
125                                              LPDWORD cbSid,
126                                              LPTSTR ReferencedDomainName,
127                                              LPDWORD cchReferencedDomainName,
128                                              PSID_NAME_USE peUse);
129
130   typedef BOOL WINAPI (*TGetFileSecurity) (LPCTSTR lpFileName,
131                                            SECURITY_INFORMATION
132                                            RequestedInformation,
133                                            PSECURITY_DESCRIPTOR
134                                            pSecurityDescriptor, DWORD nLength,
135                                            LPDWORD lpnLengthNeeded);
136   typedef BOOL WINAPI (*TInitializeSecurityDescriptor) (PSECURITY_DESCRIPTOR
137                                                         pSecurityDescriptor,
138                                                         DWORD dwRevision);
139   typedef BOOL WINAPI (*TGetSecurityDescriptorDacl) (PSECURITY_DESCRIPTOR
140                                                      pSecurityDescriptor,
141                                                      LPBOOL lpbDaclPresent,
142                                                      PACL * pDacl,
143                                                      LPBOOL lpbDaclDefaulted);
144   typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl,
145                                              LPVOID pAclInformation,
146                                              DWORD nAclInformationLength,
147                                              ACL_INFORMATION_CLASS
148                                              dwAclInformationClass);
149   typedef BOOL WINAPI (*TInitializeAcl) (PACL pAcl, DWORD nAclLength,
150                                          DWORD dwAclRevision);
151   typedef BOOL WINAPI (*TGetAce) (PACL pAcl, DWORD dwAceIndex, LPVOID * pAce);
152   typedef BOOL WINAPI (*TEqualSid) (PSID pSid1, PSID pSid2);
153   typedef BOOL WINAPI (*TAddAce) (PACL pAcl, DWORD dwAceRevision,
154                                   DWORD dwStartingAceIndex, LPVOID pAceList,
155                                   DWORD nAceListLength);
156   typedef BOOL WINAPI (*TAddAccessAllowedAce) (PACL pAcl, DWORD dwAceRevision,
157                                                DWORD AccessMask, PSID pSid);
158   typedef BOOL WINAPI (*TSetNamedSecurityInfo) (LPTSTR pObjectName,
159                                                 SE_OBJECT_TYPE ObjectType,
160                                                 SECURITY_INFORMATION
161                                                 SecurityInfo, PSID psidOwner,
162                                                 PSID psidGroup, PACL pDacl,
163                                                 PACL pSacl);
164
165   extern TNtQuerySystemInformation GNNtQuerySystemInformation;
166   extern TGetIfEntry GNGetIfEntry;
167   extern TGetIpAddrTable GNGetIpAddrTable;
168   extern TGetIfTable GNGetIfTable;
169   extern TCreateHardLink GNCreateHardLink;
170   extern TOpenSCManager GNOpenSCManager;
171   extern TCreateService GNCreateService;
172   extern TCloseServiceHandle GNCloseServiceHandle;
173   extern TDeleteService GNDeleteService;
174   extern TRegisterServiceCtrlHandler GNRegisterServiceCtrlHandler;
175   extern TSetServiceStatus GNSetServiceStatus;
176   extern TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher;
177   extern TControlService GNControlService;
178   extern TOpenService GNOpenService;
179   extern TGetBestInterface GNGetBestInterface;
180   extern TGetAdaptersInfo GGetAdaptersInfo;
181   extern TNetUserAdd GNNetUserAdd;
182   extern TNetUserSetInfo GNNetUserSetInfo;
183   extern TLsaOpenPolicy GNLsaOpenPolicy;
184   extern TLsaAddAccountRights GNLsaAddAccountRights;
185   extern TLsaRemoveAccountRights GNLsaRemoveAccountRights;
186   extern TLsaClose GNLsaClose;
187   extern TLookupAccountName GNLookupAccountName;
188   extern TGetFileSecurity GNGetFileSecurity;
189   extern TInitializeSecurityDescriptor GNInitializeSecurityDescriptor;
190   extern TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl;
191   extern TGetAclInformation GNGetAclInformation;
192   extern TInitializeAcl GNInitializeAcl;
193   extern TGetAce GNGetAce;
194   extern TEqualSid GNEqualSid;
195   extern TAddAce GNAddAce;
196   extern TAddAccessAllowedAce GNAddAccessAllowedAce;
197   extern TSetNamedSecurityInfo GNSetNamedSecurityInfo;
198
199
200   BOOL CreateShortcut (const char *pszSrc, const char *pszDest);
201   BOOL DereferenceShortcut (char *pszShortcut);
202   long QueryRegistry (HKEY hMainKey, const char *pszKey, const char *pszSubKey,
203                       char *pszBuffer, long *pdLength);
204   int ListNICs (void (*callback) (void *, const char *, int), void *cls);
205   BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName,
206                             DWORD dwAccessMask);
207   char *winErrorStr (const char *prefix, int dwErr);
208   void EnumNICs(PMIB_IFTABLE *pIfTable, PMIB_IPADDRTABLE *pAddrTable);
209   int GNInitWinEnv ();
210   void GNShutdownWinEnv ();
211
212 #ifdef __cplusplus
213 }
214 #endif
215
216 #endif