1 /***********************************************************************\ 2 * nb30.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.nb30; 12 13 private import win32.windef; 14 15 const size_t 16 NCBNAMSZ = 16, 17 MAX_LANA = 254; 18 19 // FIXME: are these really two sets of constants? 20 enum : UCHAR { 21 REGISTERING = 0, 22 REGISTERED = 4, 23 DEREGISTERED, 24 DUPLICATE, 25 DUPLICATE_DEREG, // = 7 26 UNIQUE_NAME = 0, 27 GROUP_NAME = 0x80, 28 NAME_FLAGS_MASK = 0x87 29 } 30 31 enum : UCHAR { 32 LISTEN_OUTSTANDING = 1, 33 CALL_PENDING, 34 SESSION_ESTABLISHED, 35 HANGUP_PENDING, 36 HANGUP_COMPLETE, 37 SESSION_ABORTED // = 6 38 } 39 40 const char[4] 41 ALL_TRANSPORTS = "M\0\0\0", 42 MS_NBF = "MNBF"; 43 44 enum : UCHAR { 45 NCBCALL = 0x10, 46 NCBLISTEN, 47 NCBHANGUP, // = 0x12 48 NCBSEND = 0x14, 49 NCBRECV, 50 NCBRECVANY, 51 NCBCHAINSEND, // = 0x17 52 NCBDGSEND = 0x20, 53 NCBDGRECV, 54 NCBDGSENDBC, 55 NCBDGRECVBC, // = 0x23, 56 NCBADDNAME = 0x30, 57 NCBDELNAME, 58 NCBRESET, 59 NCBASTAT, 60 NCBSSTAT, 61 NCBCANCEL, 62 NCBADDGRNAME, 63 NCBENUM, // = 0x37 64 NCBUNLINK = 0x70, 65 NCBSENDNA, 66 NCBCHAINSENDNA, 67 NCBLANSTALERT, // = 0x73 68 NCBACTION = 0x77, 69 NCBFINDNAME, 70 NCBTRACE // = 0x79 71 } 72 73 const UCHAR ASYNCH = 0x80; 74 75 enum : UCHAR { 76 NRC_GOODRET = 0x00, 77 NRC_BUFLEN = 0x01, 78 NRC_ILLCMD = 0x03, 79 NRC_CMDTMO = 0x05, 80 NRC_INCOMP, 81 NRC_BADDR, 82 NRC_SNUMOUT, 83 NRC_NORES, 84 NRC_SCLOSED, 85 NRC_CMDCAN, // = 0x0b 86 NRC_DUPNAME = 0x0d, 87 NRC_NAMTFUL, 88 NRC_ACTSES, // = 0x0f, 89 NRC_LOCTFUL = 0x11, 90 NRC_REMTFUL, 91 NRC_ILLNN, 92 NRC_NOCALL, 93 NRC_NOWILD, 94 NRC_INUSE, 95 NRC_NAMERR, 96 NRC_SABORT, 97 NRC_NAMCONF, // = 0x19 98 NRC_IFBUSY = 0x21, 99 NRC_TOOMANY, 100 NRC_BRIDGE, 101 NRC_CANOCCR, // = 0x24 102 NRC_CANCEL = 0x26, 103 NRC_DUPENV = 0x30, 104 NRC_ENVNOTDEF = 0x34, 105 NRC_OSRESNOTAV, 106 NRC_MAXAPPS, 107 NRC_NOSAPS, 108 NRC_NORESOURCES, 109 NRC_INVADDRESS, // = 0x39 110 NRC_INVDDID = 0x3B, 111 NRC_LOCKFAIL = 0x3C, 112 NRC_OPENERR = 0x3f, 113 NRC_SYSTEM = 0x40, 114 NRC_PENDING = 0xff 115 } 116 117 struct ACTION_HEADER { 118 union { 119 /* transport_id is defined as a ULONG, but both the above constants 120 * and the documented description suggest it should be a char[4] 121 */ 122 ULONG transport_id; 123 char[4] c_transport_id; 124 } 125 USHORT action_code; 126 USHORT reserved; 127 } 128 alias ACTION_HEADER* PACTION_HEADER; 129 130 struct ADAPTER_STATUS { 131 UCHAR[6] adapter_address; 132 UCHAR rev_major; 133 UCHAR reserved0; 134 UCHAR adapter_type; 135 UCHAR rev_minor; 136 WORD duration; 137 WORD frmr_recv; 138 WORD frmr_xmit; 139 WORD iframe_recv_err; 140 WORD xmit_aborts; 141 DWORD xmit_success; 142 DWORD recv_success; 143 WORD iframe_xmit_err; 144 WORD recv_buff_unavail; 145 WORD t1_timeouts; 146 WORD ti_timeouts; 147 DWORD reserved1; 148 WORD free_ncbs; 149 WORD max_cfg_ncbs; 150 WORD max_ncbs; 151 WORD xmit_buf_unavail; 152 WORD max_dgram_size; 153 WORD pending_sess; 154 WORD max_cfg_sess; 155 WORD max_sess; 156 WORD max_sess_pkt_size; 157 WORD name_count; 158 } 159 alias ADAPTER_STATUS* PADAPTER_STATUS; 160 161 struct FIND_NAME_BUFFER { 162 /* From Win32 API docs 163 * 164 * length 165 * Specifies the length, in bytes, of the FIND_NAME_BUFFER 166 * structure. Although this structure always occupies 33 bytes, 167 * not all of the structure is necessarily valid. 168 * 169 * On this basis, should length be initialised? 170 */ 171 UCHAR length; 172 UCHAR access_control; 173 UCHAR frame_control; 174 UCHAR[6] destination_addr; 175 UCHAR[6] source_addr; 176 UCHAR[18] routing_info; 177 } 178 alias FIND_NAME_BUFFER* PFIND_NAME_BUFFER; 179 180 struct FIND_NAME_HEADER { 181 WORD node_count; 182 UCHAR reserved; 183 UCHAR unique_group; 184 } 185 alias FIND_NAME_HEADER* PFIND_NAME_HEADER; 186 187 struct LANA_ENUM { 188 UCHAR length; 189 UCHAR[MAX_LANA+1] lana; 190 } 191 alias LANA_ENUM* PLANA_ENUM; 192 193 struct NAME_BUFFER { 194 UCHAR[NCBNAMSZ] name; 195 UCHAR name_num; 196 UCHAR name_flags; 197 } 198 alias NAME_BUFFER* PNAME_BUFFER; 199 200 struct NCB { 201 UCHAR ncb_command; 202 UCHAR ncb_retcode; 203 UCHAR ncb_lsn; 204 UCHAR ncb_num; 205 PUCHAR ncb_buffer; 206 WORD ncb_length; 207 UCHAR[NCBNAMSZ] ncb_callname; 208 UCHAR[NCBNAMSZ] ncb_name; 209 UCHAR ncb_rto; 210 UCHAR ncb_sto; 211 extern (Windows) void function(NCB*) ncb_post; 212 UCHAR ncb_lana_num; 213 UCHAR ncb_cmd_cplt; 214 UCHAR ncb_reserve[10]; 215 HANDLE ncb_event; 216 } 217 alias NCB* PNCB; 218 219 struct SESSION_BUFFER { 220 UCHAR lsn; 221 UCHAR state; 222 UCHAR[NCBNAMSZ] local_name; 223 UCHAR[NCBNAMSZ] remote_name; 224 UCHAR rcvs_outstanding; 225 UCHAR sends_outstanding; 226 } 227 alias SESSION_BUFFER* PSESSION_BUFFER; 228 229 struct SESSION_HEADER { 230 UCHAR sess_name; 231 UCHAR num_sess; 232 UCHAR rcv_dg_outstanding; 233 UCHAR rcv_any_outstanding; 234 } 235 alias SESSION_HEADER* PSESSION_HEADER; 236 237 extern (Windows) UCHAR Netbios(PNCB);