Separate "Enumerate Hardware Addresses" as function, as other netapi32
function need it. Implemented level 0 of NetWkstaTransportEnum.
This commit is contained in:
parent
909ffb7930
commit
51e4839fb0
|
@ -99,22 +99,15 @@ int get_hw_address(int sd, struct ifreq *ifr, unsigned char *address)
|
||||||
# endif /* SIOCGENADDR */
|
# endif /* SIOCGENADDR */
|
||||||
# endif /* SIOCGIFHWADDR */
|
# endif /* SIOCGIFHWADDR */
|
||||||
|
|
||||||
static UCHAR NETBIOS_Enum(PNCB ncb)
|
int enum_hw(void)
|
||||||
{
|
{
|
||||||
|
int ret = 0;
|
||||||
#ifdef HAVE_NET_IF_H
|
#ifdef HAVE_NET_IF_H
|
||||||
int sd;
|
int sd;
|
||||||
struct ifreq ifr, *ifrp;
|
struct ifreq ifr, *ifrp;
|
||||||
struct ifconf ifc;
|
struct ifconf ifc;
|
||||||
unsigned char buf[1024];
|
unsigned char buf[1024];
|
||||||
int i, ofs;
|
int i, ofs;
|
||||||
#endif
|
|
||||||
LANA_ENUM *lanas = (PLANA_ENUM) ncb->ncb_buffer;
|
|
||||||
|
|
||||||
TRACE("NCBENUM\n");
|
|
||||||
|
|
||||||
lanas->length = 0;
|
|
||||||
|
|
||||||
#ifdef HAVE_NET_IF_H
|
|
||||||
/* BSD 4.4 defines the size of an ifreq to be
|
/* BSD 4.4 defines the size of an ifreq to be
|
||||||
* max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
|
* max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
|
||||||
* However, under earlier systems, sa_len isn't present, so
|
* However, under earlier systems, sa_len isn't present, so
|
||||||
|
@ -156,13 +149,49 @@ static UCHAR NETBIOS_Enum(PNCB ncb)
|
||||||
a[0],a[1],a[2],a[3],a[4],a[5]);
|
a[0],a[1],a[2],a[3],a[4],a[5]);
|
||||||
|
|
||||||
NETBIOS_Adapter[i].valid = TRUE;
|
NETBIOS_Adapter[i].valid = TRUE;
|
||||||
lanas->lana[lanas->length] = i;
|
|
||||||
lanas->length++;
|
ret++;
|
||||||
}
|
}
|
||||||
ofs += ifreq_size(ifr);
|
ofs += ifreq_size(ifr);
|
||||||
}
|
}
|
||||||
close(sd);
|
close(sd);
|
||||||
|
TRACE("found %d adapters\n",ret);
|
||||||
#endif /* HAVE_NET_IF_H */
|
#endif /* HAVE_NET_IF_H */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wprint_mac(WCHAR* buffer, int index)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned char val;
|
||||||
|
for (i = 0; i<6; i++)
|
||||||
|
{
|
||||||
|
val = NETBIOS_Adapter[index].address[i];
|
||||||
|
if ((val >>4) >9)
|
||||||
|
buffer[2*i] = (WCHAR)((val >>4) + 'A' - 10);
|
||||||
|
else
|
||||||
|
buffer[2*i] = (WCHAR)((val >>4) + '0');
|
||||||
|
if ((val & 0xf ) >9)
|
||||||
|
buffer[2*i+1] = (WCHAR)((val & 0xf) + 'A' - 10);
|
||||||
|
else
|
||||||
|
buffer[2*i+1] = (WCHAR)((val & 0xf) + '0');
|
||||||
|
}
|
||||||
|
buffer[12]=(WCHAR)0;
|
||||||
|
|
||||||
|
}
|
||||||
|
static UCHAR NETBIOS_Enum(PNCB ncb)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
LANA_ENUM *lanas = (PLANA_ENUM) ncb->ncb_buffer;
|
||||||
|
|
||||||
|
TRACE("NCBENUM\n");
|
||||||
|
|
||||||
|
lanas->length = 0;
|
||||||
|
for (i = 0; i < enum_hw(); i++)
|
||||||
|
{
|
||||||
|
lanas->lana[lanas->length] = i;
|
||||||
|
lanas->length++;
|
||||||
|
}
|
||||||
return NRC_GOODRET;
|
return NRC_GOODRET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,4 +295,3 @@ BOOL WINAPI Netbios(PNCB pncb)
|
||||||
pncb->ncb_retcode = ret;
|
pncb->ncb_retcode = ret;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,7 @@
|
||||||
@ stub NetWkstaSetInfo
|
@ stub NetWkstaSetInfo
|
||||||
@ stub NetWkstaTransportAdd
|
@ stub NetWkstaTransportAdd
|
||||||
@ stub NetWkstaTransportDel
|
@ stub NetWkstaTransportDel
|
||||||
@ stub NetWkstaTransportEnum
|
@ stdcall NetWkstaTransportEnum (wstr long ptr long ptr ptr ptr) NetWkstaTransportEnum
|
||||||
@ stub NetWkstaUserEnum
|
@ stub NetWkstaUserEnum
|
||||||
@ stdcall NetWkstaUserGetInfo(wstr long ptr) NetWkstaUserGetInfo
|
@ stdcall NetWkstaUserGetInfo(wstr long ptr) NetWkstaUserGetInfo
|
||||||
@ stub NetWkstaUserSetInfo
|
@ stub NetWkstaUserSetInfo
|
||||||
|
|
|
@ -59,6 +59,76 @@ BOOL NETAPI_IsLocalComputer(LPCWSTR ServerName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int enum_hw(void);
|
||||||
|
void wprint_mac(WCHAR* buffer, int index);
|
||||||
|
|
||||||
|
NET_API_STATUS WINAPI
|
||||||
|
NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf,
|
||||||
|
DWORD prefmaxlen, LPDWORD read_entries,
|
||||||
|
LPDWORD total_entries, LPDWORD hresume)
|
||||||
|
{
|
||||||
|
FIXME(":%s, 0x%08lx, %p, 0x%08lx, %p, %p, %p\n", debugstr_w(ServerName),
|
||||||
|
level, pbuf, prefmaxlen, read_entries, total_entries,hresume);
|
||||||
|
if (!NETAPI_IsLocalComputer(ServerName))
|
||||||
|
{
|
||||||
|
FIXME(":not implemented for non-local computers\n");
|
||||||
|
return ERROR_INVALID_LEVEL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (hresume && *hresume)
|
||||||
|
{
|
||||||
|
FIXME(":resume handle not implemented\n");
|
||||||
|
return ERROR_INVALID_LEVEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case 0: /* transport info */
|
||||||
|
{
|
||||||
|
PWKSTA_TRANSPORT_INFO_0 ti;
|
||||||
|
int i,size_needed,n_adapt = enum_hw();
|
||||||
|
|
||||||
|
size_needed = n_adapt * (sizeof(WKSTA_TRANSPORT_INFO_0)
|
||||||
|
* 13 * sizeof (WCHAR));
|
||||||
|
if (prefmaxlen == MAX_PREFERRED_LENGTH)
|
||||||
|
NetApiBufferAllocate( size_needed, (LPVOID *) pbuf);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (size_needed > prefmaxlen)
|
||||||
|
return ERROR_MORE_DATA;
|
||||||
|
NetApiBufferAllocate(prefmaxlen,
|
||||||
|
(LPVOID *) pbuf);
|
||||||
|
}
|
||||||
|
for (i = 0; i <n_adapt; i++)
|
||||||
|
{
|
||||||
|
ti = (PWKSTA_TRANSPORT_INFO_0)
|
||||||
|
((PBYTE) *pbuf + i * sizeof(WKSTA_TRANSPORT_INFO_0));
|
||||||
|
ti->wkti0_quality_of_service=0;
|
||||||
|
ti->wkti0_number_of_vcs=0;
|
||||||
|
ti->wkti0_transport_name=NULL;
|
||||||
|
ti->wkti0_transport_address= (LPWSTR)
|
||||||
|
((PBYTE )*pbuf + n_adapt* sizeof(WKSTA_TRANSPORT_INFO_0)
|
||||||
|
+ i * 13 * sizeof (WCHAR));
|
||||||
|
ti->wkti0_wan_ish=TRUE; /*TCPIP/NETBIOS Protocoll*/
|
||||||
|
wprint_mac(ti->wkti0_transport_address,i);
|
||||||
|
TRACE("%d of %d:ti at %p transport_address at %p %s\n",i,n_adapt,
|
||||||
|
ti, ti->wkti0_transport_address, debugstr_w(ti->wkti0_transport_address));
|
||||||
|
}
|
||||||
|
if(read_entries)*read_entries = n_adapt;
|
||||||
|
if(total_entries)*total_entries = n_adapt;
|
||||||
|
if(hresume) *hresume= 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
ERR("Invalid level %ld is specified\n", level);
|
||||||
|
return ERROR_INVALID_LEVEL;
|
||||||
|
}
|
||||||
|
return NERR_Success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************************************
|
/************************************************************
|
||||||
* NetWkstaUserGetInfo (NETAPI32.@)
|
* NetWkstaUserGetInfo (NETAPI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,6 +28,14 @@ extern "C" {
|
||||||
/* NetBIOS */
|
/* NetBIOS */
|
||||||
UCHAR WINAPI Netbios(PNCB pncb);
|
UCHAR WINAPI Netbios(PNCB pncb);
|
||||||
|
|
||||||
|
typedef struct _WKSTA_TRANSPORT_INFO_0 {
|
||||||
|
DWORD wkti0_quality_of_service;
|
||||||
|
DWORD wkti0_number_of_vcs;
|
||||||
|
LPWSTR wkti0_transport_name;
|
||||||
|
LPWSTR wkti0_transport_address;
|
||||||
|
BOOL wkti0_wan_ish;
|
||||||
|
} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
|
||||||
|
|
||||||
typedef struct _WKSTA_USER_INFO_0 {
|
typedef struct _WKSTA_USER_INFO_0 {
|
||||||
LPWSTR wkui0_username;
|
LPWSTR wkui0_username;
|
||||||
} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
|
} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
|
||||||
|
|
Loading…
Reference in New Issue