/*
This file is part of GNUnet.
Copyright (C) 2001, 2002, 2003, 2004, 2005 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
GNUnet is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
/**
* @author Nils Durner
*
* @file
* Definitions for MS Windows
*/
#ifndef _WINPROC_H
#define _WINPROC_H
#include
#include
#include
#include
#include
#include
#include
#ifndef FD_SETSIZE
#define FD_SETSIZE 1024
#endif
#include
#include
#include
#include
#include
#include
#include
#include /* #define BYTE_ORDER */
#include
#include
#include
#ifdef __cplusplus
extern "C"
{
#endif
#ifndef MAX_NAME_LENGTH
#define MAX_NAME_LENGTH 25
#endif
typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG, PULONG);
typedef DWORD WINAPI (*TGetIfEntry) (PMIB_IFROW pIfRow);
typedef DWORD WINAPI (*TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable,
PULONG pdwSize, BOOL bOrder);
typedef DWORD WINAPI (*TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize,
BOOL bOrder);
typedef DWORD WINAPI (*TGetBestInterfaceEx) (struct sockaddr *, PDWORD);
/* TODO: Explicitly import -A variants (i.e. TCreateHardLinkA) or -W
* variants (TCreateHardLinkW), etc.
*/
typedef DWORD WINAPI (*TCreateHardLink) (LPCTSTR lpFileName,
LPCTSTR lpExistingFileName,
LPSECURITY_ATTRIBUTES
lpSecurityAttributes);
typedef SC_HANDLE WINAPI (*TOpenSCManager) (LPCTSTR lpMachineName,
LPCTSTR lpDatabaseName,
DWORD dwDesiredAccess);
typedef SC_HANDLE WINAPI (*TCreateService) (SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
LPCTSTR lpDisplayName,
DWORD dwDesiredAccess,
DWORD dwServiceType,
DWORD dwStartType,
DWORD dwErrorControl,
LPCTSTR lpBinaryPathName,
LPCTSTR lpLoadOrderGroup,
LPDWORD lpdwTagId,
LPCTSTR lpDependencies,
LPCTSTR lpServiceStartName,
LPCTSTR lpPassword);
typedef BOOL WINAPI (*TCloseServiceHandle) (SC_HANDLE hSCObject);
typedef BOOL WINAPI (*TDeleteService) (SC_HANDLE hService);
typedef SERVICE_STATUS_HANDLE WINAPI (*TRegisterServiceCtrlHandler) (LPCTSTR
lpServiceName,
LPHANDLER_FUNCTION
lpHandlerProc);
typedef BOOL WINAPI (*TSetServiceStatus) (SERVICE_STATUS_HANDLE
hServiceStatus,
LPSERVICE_STATUS lpServiceStatus);
typedef BOOL WINAPI (*TStartServiceCtrlDispatcher) (const
LPSERVICE_TABLE_ENTRY
lpServiceTable);
typedef BOOL WINAPI (*TControlService) (SC_HANDLE hService, DWORD dwControl,
LPSERVICE_STATUS lpServiceStatus);
typedef SC_HANDLE WINAPI (*TOpenService) (SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
DWORD dwDesiredAccess);
typedef DWORD WINAPI (*TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo,
PULONG pOutBufLen);
typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE, PDWORD);
typedef NET_API_STATUS WINAPI (*TNetUserSetInfo) (LPCWSTR servername,
LPCWSTR username,
DWORD level, LPBYTE buf,
LPDWORD param_err);
typedef NTSTATUS NTAPI (*TLsaOpenPolicy) (PLSA_UNICODE_STRING,
PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK,
PLSA_HANDLE);
typedef NTSTATUS NTAPI (*TLsaAddAccountRights) (LSA_HANDLE, PSID,
PLSA_UNICODE_STRING, ULONG);
typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID, BOOLEAN,
PLSA_UNICODE_STRING,
ULONG);
typedef NTSTATUS NTAPI (*TLsaClose) (LSA_HANDLE);
typedef BOOL WINAPI (*TLookupAccountName) (LPCTSTR lpSystemName,
LPCTSTR lpAccountName, PSID Sid,
LPDWORD cbSid,
LPTSTR ReferencedDomainName,
LPDWORD cchReferencedDomainName,
PSID_NAME_USE peUse);
typedef BOOL WINAPI (*TGetFileSecurity) (LPCTSTR lpFileName,
SECURITY_INFORMATION
RequestedInformation,
PSECURITY_DESCRIPTOR
pSecurityDescriptor, DWORD nLength,
LPDWORD lpnLengthNeeded);
typedef BOOL WINAPI (*TInitializeSecurityDescriptor) (PSECURITY_DESCRIPTOR
pSecurityDescriptor,
DWORD dwRevision);
typedef BOOL WINAPI (*TGetSecurityDescriptorDacl) (PSECURITY_DESCRIPTOR
pSecurityDescriptor,
LPBOOL lpbDaclPresent,
PACL * pDacl,
LPBOOL lpbDaclDefaulted);
typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl, LPVOID pAclInformation,
DWORD nAclInformationLength,
ACL_INFORMATION_CLASS
dwAclInformationClass);
typedef BOOL WINAPI (*TInitializeAcl) (PACL pAcl, DWORD nAclLength,
DWORD dwAclRevision);
typedef BOOL WINAPI (*TGetAce) (PACL pAcl, DWORD dwAceIndex, LPVOID * pAce);
typedef BOOL WINAPI (*TEqualSid) (PSID pSid1, PSID pSid2);
typedef BOOL WINAPI (*TAddAce) (PACL pAcl, DWORD dwAceRevision,
DWORD dwStartingAceIndex, LPVOID pAceList,
DWORD nAceListLength);
typedef BOOL WINAPI (*TAddAccessAllowedAce) (PACL pAcl, DWORD dwAceRevision,
DWORD AccessMask, PSID pSid);
typedef BOOL WINAPI (*TSetNamedSecurityInfo) (LPTSTR pObjectName,
SE_OBJECT_TYPE ObjectType,
SECURITY_INFORMATION
SecurityInfo, PSID psidOwner,
PSID psidGroup, PACL pDacl,
PACL pSacl);
extern TGetBestInterfaceEx GNGetBestInterfaceEx;
extern TNtQuerySystemInformation GNNtQuerySystemInformation;
extern TGetIfEntry GNGetIfEntry;
extern TGetIpAddrTable GNGetIpAddrTable;
extern TGetIfTable GNGetIfTable;
extern TCreateHardLink GNCreateHardLink;
extern TOpenSCManager GNOpenSCManager;
extern TCreateService GNCreateService;
extern TCloseServiceHandle GNCloseServiceHandle;
extern TDeleteService GNDeleteService;
extern TRegisterServiceCtrlHandler GNRegisterServiceCtrlHandler;
extern TSetServiceStatus GNSetServiceStatus;
extern TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher;
extern TControlService GNControlService;
extern TOpenService GNOpenService;
extern TGetAdaptersInfo GNGetAdaptersInfo;
extern TNetUserAdd GNNetUserAdd;
extern TNetUserSetInfo GNNetUserSetInfo;
extern TLsaOpenPolicy GNLsaOpenPolicy;
extern TLsaAddAccountRights GNLsaAddAccountRights;
extern TLsaRemoveAccountRights GNLsaRemoveAccountRights;
extern TLsaClose GNLsaClose;
extern TLookupAccountName GNLookupAccountName;
extern TGetFileSecurity GNGetFileSecurity;
extern TInitializeSecurityDescriptor GNInitializeSecurityDescriptor;
extern TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl;
extern TGetAclInformation GNGetAclInformation;
extern TInitializeAcl GNInitializeAcl;
extern TGetAce GNGetAce;
extern TEqualSid GNEqualSid;
extern TAddAce GNAddAce;
extern TAddAccessAllowedAce GNAddAccessAllowedAce;
extern TSetNamedSecurityInfo GNSetNamedSecurityInfo;
BOOL CreateShortcut (const char *pszSrc, const char *pszDest);
BOOL DereferenceShortcut (char *pszShortcut);
long QueryRegistry (HKEY hMainKey, const char *pszKey, const char *pszSubKey,
char *pszBuffer, long *pdLength);
int ListNICs (void (*callback) (void *, const char *, int), void *cls);
BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName,
DWORD dwAccessMask);
char *winErrorStr (const char *prefix, int dwErr);
void EnumNICs (PMIB_IFTABLE * pIfTable, PMIB_IPADDRTABLE * pAddrTable);
#define ENUMNICS3_MASK_OK 0x01
#define ENUMNICS3_BCAST_OK 0x02
struct EnumNICs3_results
{
unsigned char flags;
int is_default;
char pretty_name[1001];
size_t addr_size;
SOCKADDR_STORAGE address;
SOCKADDR_STORAGE mask;
SOCKADDR_STORAGE broadcast;
};
int EnumNICs3 (struct EnumNICs3_results **, int *EnumNICs3_results_count);
void EnumNICs3_free (struct EnumNICs3_results *);
int GNInitWinEnv ();
void GNShutdownWinEnv ();
BOOL SafeTerminateProcess (HANDLE hProcess, UINT uExitCode, DWORD dwTimeout);
#ifdef __cplusplus
}
#endif
#endif