GNUnet  0.10.x
Data Structures | Macros | Typedefs | Functions | Variables
winproc.h File Reference
#include <io.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/timeb.h>
#include <time.h>
#include <dirent.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <winerror.h>
#include <iphlpapi.h>
#include <shlobj.h>
#include <objbase.h>
#include <sys/param.h>
#include <ntsecapi.h>
#include <lm.h>
#include <aclapi.h>
Include dependency graph for winproc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  EnumNICs3_results
 

Macros

#define FD_SETSIZE   1024
 
#define MAX_NAME_LENGTH   25
 
#define ENUMNICS3_MASK_OK   0x01
 
#define ENUMNICS3_BCAST_OK   0x02
 

Typedefs

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)
 
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)
 

Functions

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)
 Lists all network interfaces in a combo box Used by the basic GTK configurator. More...
 
BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName, DWORD dwAccessMask)
 Grant permission to a file. More...
 
char * winErrorStr (const char *prefix, int dwErr)
 
void EnumNICs (PMIB_IFTABLE *pIfTable, PMIB_IPADDRTABLE *pAddrTable)
 
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)
 Terminate a process by creating a remote thread within it, which proceeds to call ExitProcess() inside that process. More...
 

Variables

TGetBestInterfaceEx GNGetBestInterfaceEx
 
TNtQuerySystemInformation GNNtQuerySystemInformation
 
TGetIfEntry GNGetIfEntry
 
TGetIpAddrTable GNGetIpAddrTable
 
TGetIfTable GNGetIfTable
 
TCreateHardLink GNCreateHardLink
 
TOpenSCManager GNOpenSCManager
 
TCreateService GNCreateService
 
TCloseServiceHandle GNCloseServiceHandle
 
TDeleteService GNDeleteService
 
TRegisterServiceCtrlHandler GNRegisterServiceCtrlHandler
 
TSetServiceStatus GNSetServiceStatus
 
TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher
 
TControlService GNControlService
 
TOpenService GNOpenService
 
TGetAdaptersInfo GNGetAdaptersInfo
 
TNetUserAdd GNNetUserAdd
 
TNetUserSetInfo GNNetUserSetInfo
 
TLsaOpenPolicy GNLsaOpenPolicy
 
TLsaAddAccountRights GNLsaAddAccountRights
 
TLsaRemoveAccountRights GNLsaRemoveAccountRights
 
TLsaClose GNLsaClose
 
TLookupAccountName GNLookupAccountName
 
TGetFileSecurity GNGetFileSecurity
 
TInitializeSecurityDescriptor GNInitializeSecurityDescriptor
 
TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl
 
TGetAclInformation GNGetAclInformation
 
TInitializeAcl GNInitializeAcl
 
TGetAce GNGetAce
 
TEqualSid GNEqualSid
 
TAddAce GNAddAce
 
TAddAccessAllowedAce GNAddAccessAllowedAce
 
TSetNamedSecurityInfo GNSetNamedSecurityInfo
 

Detailed Description

Author
Nils Durner

Definitions for MS Windows

Definition in file winproc.h.

Macro Definition Documentation

◆ FD_SETSIZE

#define FD_SETSIZE   1024

◆ MAX_NAME_LENGTH

#define MAX_NAME_LENGTH   25

Definition at line 60 of file winproc.h.

Referenced by CreateServiceAccount().

◆ ENUMNICS3_MASK_OK

#define ENUMNICS3_MASK_OK   0x01

Definition at line 212 of file winproc.h.

Referenced by EnumNICs3(), and GNUNET_OS_network_interfaces_list().

◆ ENUMNICS3_BCAST_OK

#define ENUMNICS3_BCAST_OK   0x02

Definition at line 213 of file winproc.h.

Referenced by EnumNICs3(), and GNUNET_OS_network_interfaces_list().

Typedef Documentation

◆ TNtQuerySystemInformation

typedef DWORD WINAPI(* TNtQuerySystemInformation) (int, PVOID, ULONG, PULONG)

Definition at line 63 of file winproc.h.

◆ TGetIfEntry

typedef DWORD WINAPI(* TGetIfEntry) (PMIB_IFROW pIfRow)

Definition at line 64 of file winproc.h.

◆ TGetIpAddrTable

typedef DWORD WINAPI(* TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize, BOOL bOrder)

Definition at line 65 of file winproc.h.

◆ TGetIfTable

typedef DWORD WINAPI(* TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder)

Definition at line 67 of file winproc.h.

◆ TGetBestInterfaceEx

typedef DWORD WINAPI(* TGetBestInterfaceEx) (struct sockaddr *, PDWORD)

Definition at line 69 of file winproc.h.

◆ TCreateHardLink

typedef DWORD WINAPI(* TCreateHardLink) (LPCTSTR lpFileName, LPCTSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)

Definition at line 73 of file winproc.h.

◆ TOpenSCManager

typedef SC_HANDLE WINAPI(* TOpenSCManager) (LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDesiredAccess)

Definition at line 77 of file winproc.h.

◆ TCreateService

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)

Definition at line 80 of file winproc.h.

◆ TCloseServiceHandle

typedef BOOL WINAPI(* TCloseServiceHandle) (SC_HANDLE hSCObject)

Definition at line 93 of file winproc.h.

◆ TDeleteService

typedef BOOL WINAPI(* TDeleteService) (SC_HANDLE hService)

Definition at line 94 of file winproc.h.

◆ TRegisterServiceCtrlHandler

typedef SERVICE_STATUS_HANDLE WINAPI(* TRegisterServiceCtrlHandler) (LPCTSTR lpServiceName, LPHANDLER_FUNCTION lpHandlerProc)

Definition at line 95 of file winproc.h.

◆ TSetServiceStatus

typedef BOOL WINAPI(* TSetServiceStatus) (SERVICE_STATUS_HANDLE hServiceStatus, LPSERVICE_STATUS lpServiceStatus)

Definition at line 99 of file winproc.h.

◆ TStartServiceCtrlDispatcher

typedef BOOL WINAPI(* TStartServiceCtrlDispatcher) (const LPSERVICE_TABLE_ENTRY lpServiceTable)

Definition at line 102 of file winproc.h.

◆ TControlService

typedef BOOL WINAPI(* TControlService) (SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus)

Definition at line 105 of file winproc.h.

◆ TOpenService

typedef SC_HANDLE WINAPI(* TOpenService) (SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD dwDesiredAccess)

Definition at line 107 of file winproc.h.

◆ TGetAdaptersInfo

typedef DWORD WINAPI(* TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)

Definition at line 110 of file winproc.h.

◆ TNetUserAdd

typedef NET_API_STATUS WINAPI(* TNetUserAdd) (LPCWSTR, DWORD, PBYTE, PDWORD)

Definition at line 112 of file winproc.h.

◆ TNetUserSetInfo

typedef NET_API_STATUS WINAPI(* TNetUserSetInfo) (LPCWSTR servername, LPCWSTR username, DWORD level, LPBYTE buf, LPDWORD param_err)

Definition at line 113 of file winproc.h.

◆ TLsaOpenPolicy

typedef NTSTATUS NTAPI(* TLsaOpenPolicy) (PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK, PLSA_HANDLE)

Definition at line 117 of file winproc.h.

◆ TLsaAddAccountRights

typedef NTSTATUS NTAPI(* TLsaAddAccountRights) (LSA_HANDLE, PSID, PLSA_UNICODE_STRING, ULONG)

Definition at line 120 of file winproc.h.

◆ TLsaRemoveAccountRights

typedef NTSTATUS NTAPI(* TLsaRemoveAccountRights) (LSA_HANDLE, PSID, BOOLEAN, PLSA_UNICODE_STRING, ULONG)

Definition at line 122 of file winproc.h.

◆ TLsaClose

typedef NTSTATUS NTAPI(* TLsaClose) (LSA_HANDLE)

Definition at line 125 of file winproc.h.

◆ TLookupAccountName

typedef BOOL WINAPI(* TLookupAccountName) (LPCTSTR lpSystemName, LPCTSTR lpAccountName, PSID Sid, LPDWORD cbSid, LPTSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse)

Definition at line 126 of file winproc.h.

◆ TGetFileSecurity

typedef BOOL WINAPI(* TGetFileSecurity) (LPCTSTR lpFileName, SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD nLength, LPDWORD lpnLengthNeeded)

Definition at line 133 of file winproc.h.

◆ TInitializeSecurityDescriptor

typedef BOOL WINAPI(* TInitializeSecurityDescriptor) (PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision)

Definition at line 139 of file winproc.h.

◆ TGetSecurityDescriptorDacl

typedef BOOL WINAPI(* TGetSecurityDescriptorDacl) (PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbDaclPresent, PACL *pDacl, LPBOOL lpbDaclDefaulted)

Definition at line 142 of file winproc.h.

◆ TGetAclInformation

typedef BOOL WINAPI(* TGetAclInformation) (PACL pAcl, LPVOID pAclInformation, DWORD nAclInformationLength, ACL_INFORMATION_CLASS dwAclInformationClass)

Definition at line 147 of file winproc.h.

◆ TInitializeAcl

typedef BOOL WINAPI(* TInitializeAcl) (PACL pAcl, DWORD nAclLength, DWORD dwAclRevision)

Definition at line 151 of file winproc.h.

◆ TGetAce

typedef BOOL WINAPI(* TGetAce) (PACL pAcl, DWORD dwAceIndex, LPVOID *pAce)

Definition at line 153 of file winproc.h.

◆ TEqualSid

typedef BOOL WINAPI(* TEqualSid) (PSID pSid1, PSID pSid2)

Definition at line 154 of file winproc.h.

◆ TAddAce

typedef BOOL WINAPI(* TAddAce) (PACL pAcl, DWORD dwAceRevision, DWORD dwStartingAceIndex, LPVOID pAceList, DWORD nAceListLength)

Definition at line 155 of file winproc.h.

◆ TAddAccessAllowedAce

typedef BOOL WINAPI(* TAddAccessAllowedAce) (PACL pAcl, DWORD dwAceRevision, DWORD AccessMask, PSID pSid)

Definition at line 158 of file winproc.h.

◆ TSetNamedSecurityInfo

typedef BOOL WINAPI(* TSetNamedSecurityInfo) (LPTSTR pObjectName, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, PSID psidOwner, PSID psidGroup, PACL pDacl, PACL pSacl)

Definition at line 160 of file winproc.h.

Function Documentation

◆ CreateShortcut()

BOOL CreateShortcut ( const char *  pszSrc,
const char *  pszDest 
)

◆ DereferenceShortcut()

BOOL DereferenceShortcut ( char *  pszShortcut)

◆ QueryRegistry()

long QueryRegistry ( HKEY  hMainKey,
const char *  pszKey,
const char *  pszSubKey,
char *  pszBuffer,
long *  pdLength 
)

◆ ListNICs()

int ListNICs ( void(*)(void *, const char *, int)  callback,
void *  callback_cls 
)

Lists all network interfaces in a combo box Used by the basic GTK configurator.

Parameters
callbackfunction to call for each NIC
callback_clsclosure for callback

Definition at line 637 of file win.c.

References EnumNICs3(), GNUNET_free_non_null, GNUNET_NO, GNUNET_OK, GNUNET_YES, EnumNICs3_results::is_default, EnumNICs3_results::pretty_name, and results.

638 {
639  int r;
640  int i;
641  struct EnumNICs3_results *results = NULL;
642  int results_count;
643 
644  r = EnumNICs3 (&results, &results_count);
645  if (r != GNUNET_OK)
646  return GNUNET_NO;
647 
648  for (i = 0; i < results_count; i++)
649  callback (callback_cls, results[i].pretty_name, results[i].is_default);
650  GNUNET_free_non_null (results);
651  return GNUNET_YES;
652 }
#define GNUNET_NO
Definition: gnunet_common.h:81
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
char pretty_name[1001]
Definition: winproc.h:219
#define GNUNET_free_non_null(a)
Definition: win.c:259
static unsigned int results
Definition: gnunet-search.c:52
int EnumNICs3(struct EnumNICs3_results **results, int *results_count)
Definition: win.c:361
#define GNUNET_YES
Definition: gnunet_common.h:80
Here is the call graph for this function:

◆ AddPathAccessRights()

BOOL AddPathAccessRights ( char *  lpszFileName,
char *  lpszAccountName,
DWORD  dwAccessMask 
)

Grant permission to a file.

Parameters
lpszFileNamethe name of the file or directory
lpszAccountNamethe user account
dwAccessMaskthe desired access (e.g. GENERIC_ALL)
Returns
TRUE on success
Remarks
based on http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q102102&

STEP 1: Get SID of the account name specified.

STEP 2: Get security descriptor (SD) of the file specified.

STEP 3: Initialize new SD.

STEP 4: Get DACL from the old SD.

STEP 5: Get size information for DACL.

STEP 6: Compute size needed for the new ACL.

STEP 7: Allocate memory for new ACL.

STEP 8: Initialize the new ACL.

STEP 9 If DACL is present, copy all the ACEs from the old DACL to the new DACL.

The following code assumes that the old DACL is already in Windows 2000 preferred order. To conform to the new Windows 2000 preferred order, first we will copy all non-inherited ACEs from the old DACL to the new DACL, irrespective of the ACE type.

TEP 10: Get an ACE.

STEP 11: Check if it is a non-inherited ACE. If it is an inherited ACE, break from the loop so that the new access allowed non-inherited ACE can be added in the correct position, immediately after all non-inherited ACEs.

STEP 12: Skip adding the ACE, if the SID matches with the account specified, as we are going to add an access allowed ACE with a different access mask.

STEP 13: Add the ACE to the new ACL.

STEP 14: Add the access-allowed ACE to the new DACL. The new ACE added here will be in the correct position, immediately after all existing non-inherited ACEs.

STEP 14.5: Make new ACE inheritable

STEP 15: To conform to the new Windows 2000 preferred order, we will now copy the rest of inherited ACEs from the old DACL to the new DACL.

STEP 16: Get an ACE.

STEP 17: Add the ACE to the new ACL.

STEP 18: Set permissions

STEP 19: Free allocated memory

Definition at line 969 of file win.c.

References end, GNAddAccessAllowedAce, GNAddAce, GNEqualSid, GNGetAce, GNGetAclInformation, GNGetFileSecurity, GNGetSecurityDescriptorDacl, GNInitializeAcl, GNInitializeSecurityDescriptor, GNLookupAccountName, GNSetNamedSecurityInfo, and INHERITED_ACE.

971 {
972  /* SID variables. */
973  SID_NAME_USE snuType;
974  TCHAR * szDomain = NULL;
975  DWORD cbDomain = 0;
976  LPVOID pUserSID = NULL;
977  DWORD cbUserSID = 0;
978 
979  /* File SD variables. */
980  PSECURITY_DESCRIPTOR pFileSD = NULL;
981  DWORD cbFileSD = 0;
982 
983  /* New SD variables. */
984  SECURITY_DESCRIPTOR newSD;
985 
986  /* ACL variables. */
987  PACL pACL = NULL;
988  BOOL fDaclPresent;
989  BOOL fDaclDefaulted;
990  ACL_SIZE_INFORMATION AclInfo;
991 
992  /* New ACL variables. */
993  PACL pNewACL = NULL;
994  DWORD cbNewACL = 0;
995 
996  /* Temporary ACE. */
997  LPVOID pTempAce = NULL;
998  UINT CurrentAceIndex = 0;
999 
1000  UINT newAceIndex = 0;
1001 
1002  /* Assume function will fail. */
1003  BOOL fResult = FALSE;
1004  BOOL fAPISuccess;
1005 
1006  SECURITY_INFORMATION secInfo = DACL_SECURITY_INFORMATION;
1007 
1011  fAPISuccess = GNLookupAccountName(NULL, (LPCTSTR) lpszAccountName,
1012  pUserSID, &cbUserSID, (LPTSTR) szDomain, &cbDomain, &snuType);
1013 
1014  /* API should have failed with insufficient buffer. */
1015  if (fAPISuccess)
1016  goto end;
1017  else if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
1018  goto end;
1019  }
1020 
1021  pUserSID = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbUserSID);
1022  if (!pUserSID) {
1023  goto end;
1024  }
1025 
1026  szDomain = (TCHAR *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbDomain * sizeof(TCHAR));
1027  if (!szDomain) {
1028  goto end;
1029  }
1030 
1031  fAPISuccess = GNLookupAccountName(NULL, (LPCTSTR) lpszAccountName,
1032  pUserSID, &cbUserSID, (LPTSTR) szDomain, &cbDomain, &snuType);
1033  if (!fAPISuccess) {
1034  goto end;
1035  }
1036 
1040  fAPISuccess = GNGetFileSecurity((LPCTSTR) lpszFileName,
1041  secInfo, pFileSD, 0, &cbFileSD);
1042 
1043  /* API should have failed with insufficient buffer. */
1044  if (fAPISuccess)
1045  goto end;
1046  else if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
1047  goto end;
1048  }
1049 
1050  pFileSD = (PSECURITY_DESCRIPTOR) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
1051  cbFileSD);
1052  if (!pFileSD) {
1053  goto end;
1054  }
1055 
1056  fAPISuccess = GNGetFileSecurity((LPCTSTR) lpszFileName,
1057  secInfo, pFileSD, cbFileSD, &cbFileSD);
1058  if (!fAPISuccess) {
1059  goto end;
1060  }
1061 
1065  if (!GNInitializeSecurityDescriptor(&newSD,
1066  SECURITY_DESCRIPTOR_REVISION)) {
1067  goto end;
1068  }
1069 
1073  if (!GNGetSecurityDescriptorDacl(pFileSD, &fDaclPresent, &pACL,
1074  &fDaclDefaulted)) {
1075  goto end;
1076  }
1077 
1081  AclInfo.AceCount = 0; // Assume NULL DACL.
1082  AclInfo.AclBytesFree = 0;
1083  AclInfo.AclBytesInUse = sizeof(ACL);
1084 
1085  if (pACL == NULL)
1086  fDaclPresent = FALSE;
1087 
1088  /* If not NULL DACL, gather size information from DACL. */
1089  if (fDaclPresent) {
1090 
1091  if (!GNGetAclInformation(pACL, &AclInfo,
1092  sizeof(ACL_SIZE_INFORMATION), AclSizeInformation)) {
1093  goto end;
1094  }
1095  }
1096 
1100  cbNewACL = AclInfo.AclBytesInUse + sizeof(ACCESS_ALLOWED_ACE)
1101  + GetLengthSid(pUserSID) - sizeof(DWORD);
1102 
1106  pNewACL = (PACL) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbNewACL);
1107  if (!pNewACL) {
1108  goto end;
1109  }
1110 
1114  if (!GNInitializeAcl(pNewACL, cbNewACL, ACL_REVISION2)) {
1115  goto end;
1116  }
1117 
1129  newAceIndex = 0;
1130 
1131  if (fDaclPresent && AclInfo.AceCount) {
1132 
1133  for (CurrentAceIndex = 0;
1134  CurrentAceIndex < AclInfo.AceCount;
1135  CurrentAceIndex++) {
1136 
1140  if (!GNGetAce(pACL, CurrentAceIndex, &pTempAce)) {
1141  goto end;
1142  }
1143 
1151  if (((ACCESS_ALLOWED_ACE *)pTempAce)->Header.AceFlags
1152  & INHERITED_ACE)
1153  break;
1154 
1161  if (GNEqualSid(pUserSID,
1162  &(((ACCESS_ALLOWED_ACE *)pTempAce)->SidStart)))
1163  continue;
1164 
1168  if (!GNAddAce(pNewACL, ACL_REVISION, MAXDWORD, pTempAce,
1169  ((PACE_HEADER) pTempAce)->AceSize)) {
1170  goto end;
1171  }
1172 
1173  newAceIndex++;
1174  }
1175  }
1176 
1182  if (!GNAddAccessAllowedAce(pNewACL, ACL_REVISION2, dwAccessMask,
1183  pUserSID)) {
1184  goto end;
1185  }
1186 
1190  if (!GetAce(pNewACL, newAceIndex, &pTempAce))
1191  goto end;
1192  ((ACCESS_ALLOWED_ACE *)pTempAce)->Header.AceFlags |=
1193  (CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE);
1194 
1200  if (fDaclPresent && AclInfo.AceCount) {
1201 
1202  for (;
1203  CurrentAceIndex < AclInfo.AceCount;
1204  CurrentAceIndex++) {
1205 
1209  if (!GNGetAce(pACL, CurrentAceIndex, &pTempAce)) {
1210  goto end;
1211  }
1212 
1216  if (!GNAddAce(pNewACL, ACL_REVISION, MAXDWORD, pTempAce,
1217  ((PACE_HEADER) pTempAce)->AceSize)) {
1218  goto end;
1219  }
1220  }
1221  }
1222 
1226  if (GNSetNamedSecurityInfo((LPTSTR) lpszFileName, SE_FILE_OBJECT,
1227  DACL_SECURITY_INFORMATION, NULL, NULL, pNewACL, NULL) != ERROR_SUCCESS) {
1228  goto end;
1229  }
1230 
1231  fResult = TRUE;
1232 
1233 end:
1234 
1238  if (pUserSID)
1239  HeapFree(GetProcessHeap(), 0, pUserSID);
1240 
1241  if (szDomain)
1242  HeapFree(GetProcessHeap(), 0, szDomain);
1243 
1244  if (pFileSD)
1245  HeapFree(GetProcessHeap(), 0, pFileSD);
1246 
1247  if (pNewACL)
1248  HeapFree(GetProcessHeap(), 0, pNewACL);
1249 
1250  return fResult;
1251 }
TEqualSid GNEqualSid
TLookupAccountName GNLookupAccountName
static int end
Set if we are to shutdown all services (including ARM).
Definition: gnunet-arm.c:34
TGetAce GNGetAce
TGetAclInformation GNGetAclInformation
TInitializeSecurityDescriptor GNInitializeSecurityDescriptor
#define INHERITED_ACE
Definition: win.c:38
TSetNamedSecurityInfo GNSetNamedSecurityInfo
TAddAccessAllowedAce GNAddAccessAllowedAce
TAddAce GNAddAce
TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl
TGetFileSecurity GNGetFileSecurity
TInitializeAcl GNInitializeAcl

◆ winErrorStr()

char* winErrorStr ( const char *  prefix,
int  dwErr 
)

Definition at line 1253 of file win.c.

References ret.

1254 {
1255  char *err, *ret;
1256  int mem;
1257 
1258  if (! FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
1259  NULL, (DWORD) dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &err,
1260  0, NULL ))
1261  {
1262  err = (char *) LocalAlloc (LMEM_FIXED | LMEM_ZEROINIT, 1);
1263  }
1264 
1265  mem = strlen(err) + strlen(prefix) + 20;
1266  ret = (char *) malloc(mem);
1267 
1268  snprintf(ret, mem, "%s: %s (#%u)", prefix, err, dwErr);
1269 
1270  LocalFree(err);
1271 
1272  return ret;
1273 }
static int ret
Final status code.
Definition: gnunet-arm.c:89

◆ EnumNICs()

void EnumNICs ( PMIB_IFTABLE *  pIfTable,
PMIB_IPADDRTABLE *  pAddrTable 
)

◆ EnumNICs3()

int EnumNICs3 ( struct EnumNICs3_results **  results,
int *  results_count 
)
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 361 of file win.c.

References EnumNICs3_results::addr_size, EnumNICs3_results::address, EnumNICs3_results::broadcast, EnumNICs2(), ENUMNICS3_BCAST_OK, ENUMNICS3_MASK_OK, EnumNICs3_results::flags, GNGetBestInterfaceEx, GNUNET_free, GNUNET_free_non_null, GNUNET_malloc, GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, inet_pton(), EnumNICs3_results::is_default, m, EnumNICs3_results::mask, EnumNICs3_results::pretty_name, and unicast().

Referenced by GNUNET_OS_network_interfaces_list(), and ListNICs().

362 {
363  DWORD dwRetVal = 0;
364  int count = 0;
365  ULONG flags = /*GAA_FLAG_INCLUDE_PREFIX |*/ GAA_FLAG_SKIP_ANYCAST |
366  GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER;
367  struct sockaddr_in6 examplecom6;
368  IPAddr examplecom;
369  DWORD best_interface = 0;
370  DWORD best_interface6 = 0;
371 
372  int use_enum2 = 0;
373  INTERFACE_INFO *interfaces4 = NULL;
374  int interfaces4_len = 0;
375  SOCKET_ADDRESS_LIST *interfaces6 = NULL;
376 
377  unsigned long outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
378  IP_ADAPTER_ADDRESSES *pCurrentAddress = NULL;
379  IP_ADAPTER_ADDRESSES *pAddresses = (IP_ADAPTER_ADDRESSES *) GNUNET_malloc (outBufLen);
380 
381  if (GetAdaptersAddresses (AF_UNSPEC, flags, NULL, pAddresses, &outBufLen)
382  == ERROR_BUFFER_OVERFLOW)
383  {
384  GNUNET_free (pAddresses);
385  pAddresses = (IP_ADAPTER_ADDRESSES *) GNUNET_malloc (outBufLen);
386  }
387 
388  dwRetVal = GetAdaptersAddresses (AF_UNSPEC, flags, NULL, pAddresses, &outBufLen);
389 
390  if (dwRetVal != NO_ERROR)
391  {
392  GNUNET_free (pAddresses);
393  return GNUNET_SYSERR;
394  }
395 
396  if (pAddresses->Length < sizeof (IP_ADAPTER_ADDRESSES_VISTA))
397  {
398  use_enum2 = 1;
399 
400  /* Enumerate NICs using WSAIoctl() */
401  if (GNUNET_OK != EnumNICs2 (&interfaces4, &interfaces4_len, &interfaces6))
402  {
403  GNUNET_free (pAddresses);
404  return GNUNET_SYSERR;
405  }
406  }
407 
408  examplecom = inet_addr("192.0.34.166"); /* www.example.com */
409  if (GetBestInterface (examplecom, &best_interface) != NO_ERROR)
410  best_interface = 0;
411 
412  if (GNGetBestInterfaceEx != NULL)
413  {
414  examplecom6.sin6_family = AF_INET6;
415  examplecom6.sin6_port = 0;
416  examplecom6.sin6_flowinfo = 0;
417  examplecom6.sin6_scope_id = 0;
418  inet_pton (AF_INET6, "2001:500:88:200:0:0:0:10",
419  (struct sockaddr *) &examplecom6.sin6_addr);
420  dwRetVal = GNGetBestInterfaceEx ((struct sockaddr *) &examplecom6,
421  &best_interface6);
422  if (dwRetVal != NO_ERROR)
423  best_interface6 = 0;
424  }
425 
426  /* Give IPv6 a priority */
427  if (best_interface6 != 0)
428  best_interface = best_interface6;
429 
430  count = 0;
431  for (pCurrentAddress = pAddresses;
432  pCurrentAddress != NULL; pCurrentAddress = pCurrentAddress->Next)
433  {
434  if (pCurrentAddress->OperStatus == IfOperStatusUp)
435  {
436  IP_ADAPTER_UNICAST_ADDRESS *unicast = NULL;
437  for (unicast = pCurrentAddress->FirstUnicastAddress; unicast != NULL;
438  unicast = unicast->Next)
439  {
440  if ((unicast->Address.lpSockaddr->sa_family == AF_INET ||
441  unicast->Address.lpSockaddr->sa_family == AF_INET6) &&
442  (unicast->DadState == IpDadStateDeprecated ||
443  unicast->DadState == IpDadStatePreferred))
444  count += 1;
445  }
446  }
447  }
448 
449  if (count == 0)
450  {
451  *results = NULL;
452  *results_count = 0;
453  GNUNET_free (pAddresses);
454  GNUNET_free_non_null (interfaces4);
455  GNUNET_free_non_null (interfaces6);
456  return GNUNET_OK;
457  }
458 
459  *results = (struct EnumNICs3_results *) GNUNET_malloc (
460  sizeof (struct EnumNICs3_results) * count);
461  *results_count = count;
462 
463  count = 0;
464  for (pCurrentAddress = pAddresses;
465  pCurrentAddress != NULL; pCurrentAddress = pCurrentAddress->Next)
466  {
467  struct EnumNICs3_results *r;
468  IP_ADAPTER_UNICAST_ADDRESS *unicast = NULL;
469  if (pCurrentAddress->OperStatus != IfOperStatusUp)
470  continue;
471  for (unicast = pCurrentAddress->FirstUnicastAddress; unicast != NULL;
472  unicast = unicast->Next)
473  {
474  int i, j;
475  int mask_length = -1;
476  char dst[INET6_ADDRSTRLEN + 1];
477 
478  if ((unicast->Address.lpSockaddr->sa_family != AF_INET &&
479  unicast->Address.lpSockaddr->sa_family != AF_INET6) ||
480  (unicast->DadState != IpDadStateDeprecated &&
481  unicast->DadState != IpDadStatePreferred))
482  continue;
483 
484  r = &(*results)[count];
485  r->flags = 0;
486  if (pCurrentAddress->IfIndex > 0 &&
487  pCurrentAddress->IfIndex == best_interface &&
488  unicast->Address.lpSockaddr->sa_family == AF_INET)
489  r->is_default = 1;
490  else if (pCurrentAddress->Ipv6IfIndex > 0 &&
491  pCurrentAddress->Ipv6IfIndex == best_interface6 &&
492  unicast->Address.lpSockaddr->sa_family == AF_INET6)
493  r->is_default = 1;
494  else
495  r->is_default = 0;
496 
497  /* Don't choose default interface twice */
498  if (r->is_default)
499  best_interface = best_interface6 = 0;
500 
501  if (!use_enum2)
502  {
503  GNUNET_memcpy (&r->address, unicast->Address.lpSockaddr,
504  unicast->Address.iSockaddrLength);
505  memset (&r->mask, 0, sizeof (struct sockaddr));
506  mask_length = ((IP_ADAPTER_UNICAST_ADDRESS_VISTA *) unicast)->
507  OnLinkPrefixLength;
508  /* OnLinkPrefixLength is the number of leading 1s in the mask.
509  * OnLinkPrefixLength is available on Vista and later (hence use_enum2).
510  */
511  if (unicast->Address.lpSockaddr->sa_family == AF_INET)
512  {
513  struct sockaddr_in *m = (struct sockaddr_in *) &r->mask;
514  for (i = 0; i < mask_length; i++)
515  ((unsigned char *) &m->sin_addr)[i / 8] |= 0x80 >> (i % 8);
516  }
517  else if (unicast->Address.lpSockaddr->sa_family == AF_INET6)
518  {
519  struct sockaddr_in6 *m = (struct sockaddr_in6 *) &r->mask;
520  struct sockaddr_in6 *b = (struct sockaddr_in6 *) &r->broadcast;
521  for (i = 0; i < mask_length; i++)
522  ((unsigned char *) &m->sin6_addr)[i / 8] |= 0x80 >> (i % 8);
523  GNUNET_memcpy (&r->broadcast, &r->address, unicast->Address.iSockaddrLength);
524  for (i = mask_length; i < 128; i++)
525  ((unsigned char *) &b->sin6_addr)[i / 8] |= 0x80 >> (i % 8);
526  }
527  r->flags |= ENUMNICS3_MASK_OK;
528  }
529  else
530  {
531  int found = 0;
532  if (unicast->Address.lpSockaddr->sa_family == AF_INET)
533  {
534  for (i = 0; !found && i < interfaces4_len / sizeof (INTERFACE_INFO); i++)
535  {
536  struct sockaddr_in *m = (struct sockaddr_in *) &r->mask;
537  GNUNET_memcpy (&interfaces4[i].iiAddress.Address,
538  unicast->Address.lpSockaddr,
539  unicast->Address.iSockaddrLength);
540  found = 1;
541  GNUNET_memcpy (&r->address, &interfaces4[i].iiAddress.Address,
542  sizeof (struct sockaddr_in));
543  GNUNET_memcpy (&r->mask, &interfaces4[i].iiNetmask.Address,
544  sizeof (struct sockaddr_in));
545  for (mask_length = 0;
546  ((unsigned char *) &m->sin_addr)[mask_length / 8] &
547  0x80 >> (mask_length % 8); mask_length++)
548  {
549  }
550  r->flags |= ENUMNICS3_MASK_OK;
551  }
552  }
553  else if (unicast->Address.lpSockaddr->sa_family == AF_INET6)
554  {
555  for (i = 0;
556  interfaces6 != NULL && !found && i < interfaces6->iAddressCount;
557  i++)
558  {
559  GNUNET_memcpy (interfaces6->Address[i].lpSockaddr,
560  unicast->Address.lpSockaddr,
561  unicast->Address.iSockaddrLength);
562  found = 1;
563  GNUNET_memcpy (&r->address, interfaces6->Address[i].lpSockaddr,
564  sizeof (struct sockaddr_in6));
565  /* TODO: Find a way to reliably get network mask for IPv6 on XP */
566  memset (&r->mask, 0, sizeof (struct sockaddr));
567  r->flags &= ~ENUMNICS3_MASK_OK;
568  }
569  }
570  if (!found)
571  {
572  DebugBreak ();
573  }
574  }
575  if (unicast->Address.lpSockaddr->sa_family == AF_INET)
576  {
577  struct sockaddr_in *m = (struct sockaddr_in *) &r->mask;
578  struct sockaddr_in *a = (struct sockaddr_in *) &r->address;
579  /* copy address to broadcast, then flip all the trailing bits not
580  * falling under netmask to 1,
581  * so we get, 192.168.0.255 from, say, 192.168.0.43 with mask == 24.
582  */
583  GNUNET_memcpy (&r->broadcast, &r->address, unicast->Address.iSockaddrLength);
584  for (i = mask_length; i < 32; i++)
585  ((unsigned char *) &m->sin_addr)[i / 8] |= 0x80 >> (i % 8);
587  r->addr_size = sizeof (struct sockaddr_in);
588  inet_ntop (AF_INET, &a->sin_addr, dst, INET_ADDRSTRLEN);
589  }
590  else if (unicast->Address.lpSockaddr->sa_family == AF_INET6)
591  {
592  struct sockaddr_in6 *a = (struct sockaddr_in6 *) &r->address;
593  /* for IPv6 broadcast is not defined, zero it down */
594  memset (&r->broadcast, 0, sizeof (struct sockaddr));
595  r->flags &= ~ENUMNICS3_BCAST_OK;
596  r->addr_size = sizeof (struct sockaddr_in6);
597  inet_ntop (AF_INET6, &a->sin6_addr, dst, INET6_ADDRSTRLEN);
598  }
599 
600  i = 0;
601  i += snprintf (&r->pretty_name[i], 1000 - i > 0 ? 1000 - i : 0,
602  "%S (%s", pCurrentAddress->FriendlyName, dst);
603  for (j = 0; j < pCurrentAddress->PhysicalAddressLength; j++)
604  i += snprintf (&r->pretty_name[i], 1000 - i > 0 ? 1000 - i : 0,
605  "%s%02X",j > 0 ? ":" : " - ", pCurrentAddress->PhysicalAddress[j]);
606  i += snprintf (&r->pretty_name[i], 1000 - i > 0 ? 1000 - i : 0, ")");
607  r->pretty_name[1000] = '\0';
608  count += 1;
609  }
610  }
611 
612  if (use_enum2)
613  {
614  GNUNET_free_non_null (interfaces4);
615  GNUNET_free_non_null (interfaces6);
616  }
617 
618  GNUNET_free (pAddresses);
619  return GNUNET_OK;
620 }
SOCKADDR_STORAGE address
Definition: winproc.h:221
#define GNUNET_free(a)
Definition: win.c:256
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_malloc(a)
Definition: win.c:252
static struct GNUNET_ARM_MonitorHandle * m
Monitor connection with ARM.
Definition: gnunet-arm.c:99
#define GNUNET_memcpy(dst, src, n)
char pretty_name[1001]
Definition: winproc.h:219
size_t addr_size
Definition: winproc.h:220
SOCKADDR_STORAGE broadcast
Definition: winproc.h:223
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
static void unicast(struct TransportClient *tc, const struct GNUNET_MessageHeader *msg, int may_drop)
Queue the given message for transmission to the given client.
#define GNUNET_free_non_null(a)
Definition: win.c:259
unsigned char flags
Definition: winproc.h:217
TGetBestInterfaceEx GNGetBestInterfaceEx
#define ENUMNICS3_BCAST_OK
Definition: winproc.h:213
static int inet_pton(int af, const char *cp, struct in_addr *buf)
Convert IPv4 address from text to binary form.
#define ENUMNICS3_MASK_OK
Definition: winproc.h:212
int EnumNICs2(INTERFACE_INFO **ifs4, int *ifs4_len, SOCKET_ADDRESS_LIST **ifs6)
Definition: win.c:300
SOCKADDR_STORAGE mask
Definition: winproc.h:222
Here is the call graph for this function:
Here is the caller graph for this function:

◆ EnumNICs3_free()

void EnumNICs3_free ( struct EnumNICs3_results )

Definition at line 623 of file win.c.

References GNUNET_free_non_null.

Referenced by GNUNET_OS_network_interfaces_list().

624 {
626 }
#define GNUNET_free_non_null(a)
Definition: win.c:259
Here is the caller graph for this function:

◆ GNInitWinEnv()

int GNInitWinEnv ( )

Referenced by __attribute__().

Here is the caller graph for this function:

◆ GNShutdownWinEnv()

void GNShutdownWinEnv ( )

Referenced by __attribute__().

Here is the caller graph for this function:

◆ SafeTerminateProcess()

BOOL SafeTerminateProcess ( HANDLE  hProcess,
UINT  uExitCode,
DWORD  dwTimeout 
)

Terminate a process by creating a remote thread within it, which proceeds to call ExitProcess() inside that process.

Safer than TerminateProcess ().

Code is from From http://private-storm.de/2009/08/11/case-terminateprocess/

Parameters
hProcesshandle of a process to terminate
uExitCodeexit code to use for ExitProcess()
dwTimeoutnumber of ms to wait for the process to terminate
Returns
TRUE on success, FALSE on failure (check last error for the code)

Definition at line 1288 of file win.c.

Referenced by GNUNET_OS_process_kill(), and start_process().

1289 {
1290  DWORD dwTID, dwCode, dwErr = 0;
1291  HANDLE hProcessDup = INVALID_HANDLE_VALUE;
1292  HANDLE hRT = NULL;
1293  HINSTANCE hKernel = GetModuleHandle ("Kernel32");
1294  BOOL bSuccess = FALSE;
1295 
1296  BOOL bDup = DuplicateHandle (GetCurrentProcess (), hProcess,
1297  GetCurrentProcess (), &hProcessDup, PROCESS_ALL_ACCESS,
1298  FALSE, 0);
1299 
1300  /* Detect the special case where the process is
1301  * already dead...
1302  */
1303  if (GetExitCodeProcess (bDup ? hProcessDup : hProcess, &dwCode) &&
1304  (STILL_ACTIVE == dwCode))
1305  {
1306  FARPROC pfnExitProc;
1307 
1308  pfnExitProc = GetProcAddress (hKernel, "ExitProcess");
1309 
1310  hRT = CreateRemoteThread ((bDup) ? hProcessDup : hProcess, NULL, 0,
1311  (LPTHREAD_START_ROUTINE) pfnExitProc, (PVOID) uExitCode, 0, &dwTID);
1312 
1313  dwErr = GetLastError ();
1314  }
1315  else
1316  {
1317  dwErr = ERROR_PROCESS_ABORTED;
1318  }
1319 
1320  if (hRT)
1321  {
1322  /* Must wait process to terminate to
1323  * guarantee that it has exited...
1324  */
1325  DWORD dwWaitResult = WaitForSingleObject ((bDup) ? hProcessDup : hProcess,
1326  dwTimeout);
1327  if (dwWaitResult == WAIT_TIMEOUT)
1328  dwErr = WAIT_TIMEOUT;
1329  else
1330  dwErr = GetLastError ();
1331 
1332  CloseHandle (hRT);
1333  bSuccess = dwErr == NO_ERROR;
1334  }
1335 
1336  if (bDup)
1337  CloseHandle (hProcessDup);
1338 
1339  SetLastError (dwErr);
1340 
1341  return bSuccess;
1342 }
Here is the caller graph for this function:

Variable Documentation

◆ GNGetBestInterfaceEx

TGetBestInterfaceEx GNGetBestInterfaceEx

Referenced by EnumNICs3().

◆ GNNtQuerySystemInformation

TNtQuerySystemInformation GNNtQuerySystemInformation

Referenced by updateUsage().

◆ GNGetIfEntry

TGetIfEntry GNGetIfEntry

◆ GNGetIpAddrTable

TGetIpAddrTable GNGetIpAddrTable

◆ GNGetIfTable

TGetIfTable GNGetIfTable

◆ GNCreateHardLink

TCreateHardLink GNCreateHardLink

◆ GNOpenSCManager

TOpenSCManager GNOpenSCManager

◆ GNCreateService

TCreateService GNCreateService

Referenced by InstallAsService().

◆ GNCloseServiceHandle

TCloseServiceHandle GNCloseServiceHandle

◆ GNDeleteService

TDeleteService GNDeleteService

Referenced by UninstallService().

◆ GNRegisterServiceCtrlHandler

TRegisterServiceCtrlHandler GNRegisterServiceCtrlHandler

◆ GNSetServiceStatus

TSetServiceStatus GNSetServiceStatus

◆ GNStartServiceCtrlDispatcher

TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher

◆ GNControlService

TControlService GNControlService

◆ GNOpenService

TOpenService GNOpenService

Referenced by UninstallService().

◆ GNGetAdaptersInfo

TGetAdaptersInfo GNGetAdaptersInfo

◆ GNNetUserAdd

TNetUserAdd GNNetUserAdd

Referenced by CreateServiceAccount().

◆ GNNetUserSetInfo

TNetUserSetInfo GNNetUserSetInfo

Referenced by CreateServiceAccount().

◆ GNLsaOpenPolicy

TLsaOpenPolicy GNLsaOpenPolicy

Referenced by _OpenPolicy().

◆ GNLsaAddAccountRights

TLsaAddAccountRights GNLsaAddAccountRights

Referenced by _SetPrivilegeOnAccount().

◆ GNLsaRemoveAccountRights

TLsaRemoveAccountRights GNLsaRemoveAccountRights

Referenced by _SetPrivilegeOnAccount().

◆ GNLsaClose

TLsaClose GNLsaClose

Referenced by CreateServiceAccount().

◆ GNLookupAccountName

TLookupAccountName GNLookupAccountName

◆ GNGetFileSecurity

TGetFileSecurity GNGetFileSecurity

Referenced by AddPathAccessRights().

◆ GNInitializeSecurityDescriptor

TInitializeSecurityDescriptor GNInitializeSecurityDescriptor

Referenced by AddPathAccessRights().

◆ GNGetSecurityDescriptorDacl

TGetSecurityDescriptorDacl GNGetSecurityDescriptorDacl

Referenced by AddPathAccessRights().

◆ GNGetAclInformation

TGetAclInformation GNGetAclInformation

Referenced by AddPathAccessRights().

◆ GNInitializeAcl

TInitializeAcl GNInitializeAcl

Referenced by AddPathAccessRights().

◆ GNGetAce

TGetAce GNGetAce

Referenced by AddPathAccessRights().

◆ GNEqualSid

TEqualSid GNEqualSid

Referenced by AddPathAccessRights().

◆ GNAddAce

TAddAce GNAddAce

Referenced by AddPathAccessRights().

◆ GNAddAccessAllowedAce

TAddAccessAllowedAce GNAddAccessAllowedAce

Referenced by AddPathAccessRights().

◆ GNSetNamedSecurityInfo

TSetNamedSecurityInfo GNSetNamedSecurityInfo

Referenced by AddPathAccessRights().