221{
230 DWORD outIDCount, i1, iAddr;
231 DWORD bCastAddr, outNumberOfBytes;
237
238
239 IntfIDList =
HeapAlloc(hHeap, 0,
sizeof(*IntfIDList));
241
242
245 {
248 }
249
250 DPRINT(
"TcpFile %p\n", TcpFile);
251
253 {
254 DPRINT(
"ERROR in AllocAndGetEntityArray: out of memory!\n");
257 }
258
260 pIFEntry =
HeapAlloc(hHeap, 0, IFEntryLen);
261 if (pIFEntry == 0)
262 {
266 }
267
268
269 pEntityID = outEntityID;
270 for (i1 = 0; i1 < outIDCount; i1++)
271 {
272
275 {
276 pEntityID++;
277 continue;
278 }
279
283
284
287 pIntfIDItem->
id = *pEntityID;
289
291
292 pEntityID++;
293 }
294
295
296 outNumberOfBytes = 0;
298 {
300 }
301 DPRINT(
"Buffer size needed: %lu\n", outNumberOfBytes);
303 {
304
305 if (NumberOfBytesReturned)
306 *NumberOfBytesReturned = 0;
309 }
310
311
317 {
319
322
324 TcpFile,
326 &inTcpReq1,
327 sizeof(inTcpReq1),
330 &BufLenNeeded,
332 {
334 DPRINT(
"DeviceIoControl failed, Status %li!\n", LastErr);
337 }
338 }
339
340
343 {
345
347 for (iAddr = 0; iAddr < pIntfIDItem->
numaddr; iAddr++)
348 {
349 DPRINT(
"BufLen %lu\n",BufLenNeeded);
354
358
361 bCastAddr = (pIPAddrEntry->
iae_bcastaddr == 0) ? 0 : 0xffffffff;
363
367
371
372 pIPAddrEntry++;
373 pIntfInfo++;
374 }
376 }
377
378
379 pEntityID = outEntityID;
380 for (i1 = 0; i1 < outIDCount; i1++)
381 {
385
387 {
388 pEntityID++;
389 continue;
390 }
391
395
396
398 {
399 pEntityID++;
400 continue;
401 }
402
403
406 {
408 for (iAddr = 0; iAddr < pIntfIDItem->
numaddr; iAddr++)
409 {
412
413 pIPAddrEntry++;
414 pIntfInfo++;
415 }
416 }
417
418 pEntityID++;
419 }
420
421 if (NumberOfBytesReturned)
422 *NumberOfBytesReturned = outNumberOfBytes;
423 if (NeedsCompletion !=
NULL)
424 *NeedsCompletion =
FALSE;
425
428 DPRINT(
"WSHIoctl_GetInterfaceList - CLEANUP\n");
429 if (TcpFile != 0)
431 if (pIFEntry !=
NULL)
435 {
440 }
443}
#define IP_MIB_ADDRTABLE_ENTRY_ID
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
#define NT_SUCCESS(StatCode)
#define HeapFree(x, y, z)
static void cleanup(void)
INT GetIPSNMPInfo(IN HANDLE TcpFile, IN TDIEntityID *pEntityID, OUT IPSNMPInfo *outIPSNMPInfo)
INT GetIFEntry(IN HANDLE TcpFile, IN TDIEntityID *pEntityID, OUT IFEntry *pIFEntry, IN ULONG IFEntryLen)
BOOL AllocAndGetEntityArray(IN HANDLE TcpFile, IN HANDLE hHeap, OUT TDIEntityID **ppEntities, OUT PDWORD idCount)
INT GetTdiEntityType(IN HANDLE TcpFile, IN TDIEntityID *pEntityID, OUT PULONG pType)
#define MAX_ADAPTER_DESCRIPTION_LENGTH
@ IF_OPER_STATUS_CONNECTING
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field)
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
sockaddr_gen iiBroadcastAddress
IPAddrEntry * pIPAddrEntry0
#define INFO_CLASS_PROTOCOL
#define INFO_TYPE_PROVIDER
#define IOCTL_TCP_QUERY_INFORMATION_EX
#define RtlZeroMemory(Destination, Length)
struct sockaddr_in AddressIn
_In_ WDFREQUEST _In_ size_t OutputBufferLength
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
DWORD WINAPI GetLastError(void)
struct _INTERFACE_INFO INTERFACE_INFO
struct _INTERFACE_INFO * LPINTERFACE_INFO