1 /***********************************************************************\ 2 * nspapi.d * 3 * * 4 * Windows API header module * 5 * * 6 * Translated from MinGW Windows headers * 7 * by Stewart Gordon * 8 * * 9 * Placed into public domain * 10 \***********************************************************************/ 11 module win32.nspapi; 12 13 private import win32.basetyps, win32.windef; 14 15 // FIXME: check types of constants 16 17 enum { 18 NS_ALL = 0, 19 20 NS_SAP, 21 NS_NDS, 22 NS_PEER_BROWSE, 23 24 NS_TCPIP_LOCAL = 10, 25 NS_TCPIP_HOSTS, 26 NS_DNS, 27 NS_NETBT, 28 NS_WINS, 29 30 NS_NBP = 20, 31 32 NS_MS = 30, 33 NS_STDA, 34 NS_NTDS, 35 36 NS_X500 = 40, 37 NS_NIS, 38 NS_NISPLUS, 39 40 NS_WRQ = 50 41 } 42 43 enum { 44 SERVICE_REGISTER = 1, 45 SERVICE_DEREGISTER = 2, 46 SERVICE_FLUSH = 3, 47 SERVICE_FLAG_HARD = 2 48 } 49 50 /* MinGW makes the next section conditional on winsock.h or winsock2.h 51 * being included. But that doesn't translate well into D. 52 */ 53 version (Win32_Winsock1) { 54 import win32.winsock; 55 } else { 56 import win32.winsock2; 57 } 58 59 struct SOCKET_ADDRESS { 60 LPSOCKADDR lpSockaddr; 61 INT iSockaddrLength; 62 } 63 alias SOCKET_ADDRESS* PSOCKET_ADDRESS, LPSOCKET_ADDRESS; 64 65 struct CSADDR_INFO { 66 SOCKET_ADDRESS LocalAddr; 67 SOCKET_ADDRESS RemoteAddr; 68 INT iSocketType; 69 INT iProtocol; 70 } 71 alias CSADDR_INFO* PCSADDR_INFO, LPCSADDR_INFO; 72 73 struct BLOB { 74 ULONG cbSize; 75 BYTE* pBlobData; 76 } 77 alias BLOB* PBLOB, LPBLOB; 78 79 struct SERVICE_ADDRESS { 80 DWORD dwAddressType; 81 DWORD dwAddressFlags; 82 DWORD dwAddressLength; 83 DWORD dwPrincipalLength; 84 BYTE* lpAddress; 85 BYTE* lpPrincipal; 86 } 87 88 struct SERVICE_ADDRESSES { 89 DWORD dwAddressCount; 90 SERVICE_ADDRESS _Addresses; 91 92 SERVICE_ADDRESS* Addresses() { return &_Addresses; } 93 } 94 alias SERVICE_ADDRESSES* PSERVICE_ADDRESSES, LPSERVICE_ADDRESSES; 95 96 struct SERVICE_INFOA { 97 LPGUID lpServiceType; 98 LPSTR lpServiceName; 99 LPSTR lpComment; 100 LPSTR lpLocale; 101 DWORD dwDisplayHint; 102 DWORD dwVersion; 103 DWORD dwTime; 104 LPSTR lpMachineName; 105 LPSERVICE_ADDRESSES lpServiceAddress; 106 BLOB ServiceSpecificInfo; 107 } 108 alias SERVICE_INFOA* LPSERVICE_INFOA; 109 110 struct SERVICE_INFOW { 111 LPGUID lpServiceType; 112 LPWSTR lpServiceName; 113 LPWSTR lpComment; 114 LPWSTR lpLocale; 115 DWORD dwDisplayHint; 116 DWORD dwVersion; 117 DWORD dwTime; 118 LPWSTR lpMachineName; 119 LPSERVICE_ADDRESSES lpServiceAddress; 120 BLOB ServiceSpecificInfo; 121 } 122 alias SERVICE_INFOW* LPSERVICE_INFOW; 123 124 alias void* LPSERVICE_ASYNC_INFO; 125 126 extern (Windows) { 127 INT SetServiceA(DWORD, DWORD, DWORD, LPSERVICE_INFOA, 128 LPSERVICE_ASYNC_INFO, LPDWORD); 129 INT SetServiceW(DWORD, DWORD, DWORD, LPSERVICE_INFOW, 130 LPSERVICE_ASYNC_INFO, LPDWORD); 131 INT GetAddressByNameA(DWORD, LPGUID, LPSTR, LPINT, DWORD, 132 LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPSTR, LPDWORD); 133 INT GetAddressByNameW(DWORD, LPGUID, LPWSTR, LPINT, DWORD, 134 LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPWSTR, LPDWORD); 135 } 136 137 version (Unicode) { 138 alias SERVICE_INFOW SERVICE_INFO; 139 alias SetServiceW SetService; 140 alias GetAddressByNameW GetAddressByName; 141 } else { 142 alias SERVICE_INFOA SERVICE_INFO; 143 alias SetServiceA SetService; 144 alias GetAddressByNameA GetAddressByName; 145 } 146 147 alias SERVICE_INFO _SERVICE_INFO; 148 alias SERVICE_INFO* LPSERVICE_INFO;