NTSTATUS status = STATUS_SUCCESS;
DWORD returnSize;
- WARN("TdiGetMibForIfEntity(tcpFile %x,entityId %x)\n",
- (int)tcpFile, (int)ent->tei_instance);
+ WARN("TdiGetMibForIfEntity(tcpFile %p,entityId %p)\n",
+ tcpFile, ent->tei_instance);
req.ID.toi_class = INFO_CLASS_PROTOCOL;
req.ID.toi_type = INFO_TYPE_PROVIDER;
entry->ent.if_speed,
entry->ent.if_physaddrlen);
TRACE(" if_physaddr .................... %02x:%02x:%02x:%02x:%02x:%02x\n"
- " if_descr ....................... %s\n",
+ " if_descr ....................... %*s\n",
entry->ent.if_physaddr[0] & 0xff,
entry->ent.if_physaddr[1] & 0xff,
entry->ent.if_physaddr[2] & 0xff,
entry->ent.if_physaddr[3] & 0xff,
entry->ent.if_physaddr[4] & 0xff,
entry->ent.if_physaddr[5] & 0xff,
+ entry->ent.if_descrlen,
entry->ent.if_descr);
TRACE("} status %08x\n",status);
NULL );
if( !NT_SUCCESS(status) ) return FALSE;
- return (type & AT_ARP);
+ /* AT_ARP corresponds to an individual TDI entity type */
+ return (type == AT_ARP);
}
static NTSTATUS getInterfaceInfoSet( HANDLE tcpFile,
IFInfo **infoSet,
PDWORD numInterfaces ) {
DWORD numEntities;
- TDIEntityID *entIDSet = 0;
+ TDIEntityID *entIDSet = NULL;
NTSTATUS status = tdiGetEntityIDSet( tcpFile, &entIDSet, &numEntities );
IFInfo *infoSetInt = 0;
int curInterf = 0, i;
TDIEntityID ip_ent;
int j;
- status = getNthIpEntity( tcpFile, curInterf, &ip_ent );
- if( NT_SUCCESS(status) )
- status = tdiGetIpAddrsForIpEntity
- ( tcpFile, &ip_ent, &addrs, &numAddrs );
- for( j = 0; j < numAddrs && NT_SUCCESS(status); j++ ) {
- TRACE("ADDR %d: index %d (target %d)\n", j, addrs[j].iae_index, infoSetInt[curInterf].if_info.ent.if_index);
- if( addrs[j].iae_index ==
- infoSetInt[curInterf].if_info.ent.if_index ) {
- memcpy( &infoSetInt[curInterf].ip_addr,
- &addrs[j],
- sizeof( addrs[j] ) );
- curInterf++;
- break;
- }
- }
+ status = getNthIpEntity( tcpFile, curInterf, &ip_ent );
+ if( NT_SUCCESS(status) )
+ status = tdiGetIpAddrsForIpEntity
+ ( tcpFile, &ip_ent, &addrs, &numAddrs );
+ for( j = 0; NT_SUCCESS(status) && j < numAddrs; j++ ) {
+ TRACE("ADDR %d: index %d (target %d)\n", j, addrs[j].iae_index, infoSetInt[curInterf].if_info.ent.if_index);
+ if( addrs[j].iae_index ==
+ infoSetInt[curInterf].if_info.ent.if_index ) {
+ memcpy( &infoSetInt[curInterf].ip_addr,
+ &addrs[j],
+ sizeof( addrs[j] ) );
+ curInterf++;
+ break;
+ }
+ }
+ if ( NT_SUCCESS(status) )
+ tdiFreeThingSet(addrs);
}
}
}
return status;
} else {
+ tdiFreeThingSet(entIDSet);
return STATUS_INSUFFICIENT_RESOURCES;
}
}
NTSTATUS status;
int i;
- status = openTcpFile( &tcpFile );
+ status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( !NT_SUCCESS(status) ) {
WARN("getNumInterfaces: failed %08x\n", status );
for( i = 0; i < numEntities; i++ ) {
if( isInterface( &entitySet[i] ) &&
- (!onlyNonLoopback ||
- (onlyNonLoopback && !isLoopback( tcpFile, &entitySet[i] ))) )
+ (!onlyNonLoopback || !isLoopback( tcpFile, &entitySet[i] )) )
numInterfaces++;
}
TRACE("Index %d is entity #%d - %04x:%08x\n", index, i,
entitySet[i].tei_entity, entitySet[i].tei_instance );
- tdiFreeThingSet( entitySet );
-
if( numInterfaces == index && i < numEntities ) {
memcpy( ent, &entitySet[i], sizeof(*ent) );
+ tdiFreeThingSet( entitySet );
return STATUS_SUCCESS;
} else {
+ tdiFreeThingSet( entitySet );
return STATUS_UNSUCCESSFUL;
}
}
if( NT_SUCCESS(status) )
{
for( i = 0; i < numInterfaces; i++ ) {
- if( !strcmp((PCHAR)ifInfo[i].if_info.ent.if_descr, name) ) {
+ if( !strncmp((PCHAR)ifInfo[i].if_info.ent.if_descr, name, ifInfo[i].if_info.ent.if_descrlen) ) {
memcpy( info, &ifInfo[i], sizeof(*info) );
break;
}
{
IFInfo ifInfo;
HANDLE tcpFile;
- char *interfaceName = 0, *adapter_name = 0;
- NTSTATUS status = openTcpFile( &tcpFile );
+ char *interfaceName = NULL;
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getInterfaceInfoByIndex( tcpFile, index, &ifInfo );
if( NT_SUCCESS(status) ) {
- adapter_name = (char *)ifInfo.if_info.ent.if_descr;
-
interfaceName = HeapAlloc( GetProcessHeap(), 0,
- strlen(adapter_name) + 1 );
- if (!interfaceName) return NULL;
-
- strcpy( interfaceName, adapter_name );
+ ifInfo.if_info.ent.if_descrlen + 1 );
+ if( interfaceName ) {
+ memcpy(interfaceName, ifInfo.if_info.ent.if_descr, ifInfo.if_info.ent.if_descrlen);
+ interfaceName[ifInfo.if_info.ent.if_descrlen] = '\0';
+ }
}
closeTcpFile( tcpFile );
{
IFInfo ifInfo;
HANDLE tcpFile;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getInterfaceInfoByName( tcpFile, (char *)name, &ifInfo );
IFInfo *ifInfo;
InterfaceIndexTable *ret = 0;
HANDLE tcpFile;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getInterfaceInfoSet( tcpFile, &ifInfo, &numInterfaces );
TRACE("InterfaceInfoSet: %08x, %04x:%08x\n",
- status,
- ifInfo->entity_id.tei_entity,
- ifInfo->entity_id.tei_instance);
+ status,
+ ifInfo->entity_id.tei_entity,
+ ifInfo->entity_id.tei_instance);
if( NT_SUCCESS(status) ) {
ret = (InterfaceIndexTable *)
if (ret) {
ret->numAllocated = numInterfaces;
- TRACE("NumInterfaces = %d\n", numInterfaces);
+ TRACE("NumInterfaces = %d\n", numInterfaces);
for( i = 0; i < numInterfaces; i++ ) {
- TRACE("Examining interface %d\n", i);
+ TRACE("Examining interface %d\n", i);
if( !nonLoopbackOnly ||
!isLoopback( tcpFile, &ifInfo[i].entity_id ) ) {
- TRACE("Interface %d matches (%d)\n", i, curInterface);
+ TRACE("Interface %d matches (%d)\n", i, curInterface);
ret->indexes[curInterface++] =
ifInfo[i].if_info.ent.if_index;
}
NTSTATUS status = STATUS_SUCCESS;
DWORD addrOut = INADDR_ANY;
- status = openTcpFile( &tcpFile );
+ status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getIPAddrEntryForIf( tcpFile, name, index, &ifInfo );
{
HANDLE tcpFile;
IFInfo info;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getInterfaceInfoByName( tcpFile, (char *)name, &info );
{
HANDLE tcpFile;
IFInfo info;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
if( NT_SUCCESS(status) ) {
status = getInterfaceInfoByIndex( tcpFile, index, &info );
{
HANDLE tcpFile;
IFInfo info;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
TRACE("Called.\n");
{
HANDLE tcpFile;
IFInfo info;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
TRACE("Called.\n");
if (string)
strncpy(string, inet_ntoa(iAddr), 16);
-
+
return inet_ntoa(iAddr);
}
PULONG NteContext, PULONG NteInstance )
{
HANDLE tcpFile;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA | FILE_WRITE_DATA );
IP_SET_DATA Data;
IO_STATUS_BLOCK Iosb;
NTSTATUS deleteIpAddress( ULONG NteContext )
{
HANDLE tcpFile;
- NTSTATUS status = openTcpFile( &tcpFile );
+ NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA | FILE_WRITE_DATA );
IO_STATUS_BLOCK Iosb;
TRACE("Called.\n");