ReactOS 0.4.16-dev-752-g47bae01
wksta.c File Reference
#include "netapi32.h"
#include <lmwksta.h>
#include <lmjoin.h>
Include dependency graph for wksta.c:

Go to the source code of this file.

Classes

struct  WkstaTransportEnumData
 

Macros

#define MAX_TRANSPORT_NAME   MAX_INTERFACE_NAME_LEN
 
#define MAX_TRANSPORT_ADDR   13
 
#define NBT_TRANSPORT_NAME_HEADER   "\\Device\\NetBT_Tcpip_"
 
#define UNKNOWN_TRANSPORT_NAME_HEADER   "\\Device\\UnknownTransport_"
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (netapi32)
 
DECLSPEC_HIDDEN BOOL NETAPI_IsLocalComputer (LMCSTR name)
 
static void wprint_mac (WCHAR *buffer, int len, const MIB_IFROW *ifRow)
 
static void wprint_name (WCHAR *buffer, int len, ULONG transport, PMIB_IFROW ifRow)
 
static BOOL WkstaEnumAdaptersCallback (UCHAR totalLANAs, UCHAR lanaIndex, ULONG transport, const NetBIOSAdapterImpl *data, void *closure)
 
NET_API_STATUS WINAPI NetWkstaTransportEnum (LMSTR ServerName, DWORD level, PBYTE *pbuf, DWORD prefmaxlen, LPDWORD read_entries, PDWORD total_entries, PDWORD hresume)
 
NET_API_STATUS WINAPI NetpGetComputerName (LPWSTR *Buffer)
 
NET_API_STATUS WINAPI I_NetNameCompare (LPVOID p1, LPWSTR wkgrp, LPWSTR comp, LPVOID p4, LPVOID p5)
 
NET_API_STATUS WINAPI I_NetNameValidate (LPVOID p1, LPWSTR wkgrp, LPVOID p3, LPVOID p4)
 

Macro Definition Documentation

◆ MAX_TRANSPORT_ADDR

#define MAX_TRANSPORT_ADDR   13

Definition at line 82 of file wksta.c.

◆ MAX_TRANSPORT_NAME

#define MAX_TRANSPORT_NAME   MAX_INTERFACE_NAME_LEN

Definition at line 81 of file wksta.c.

◆ NBT_TRANSPORT_NAME_HEADER

#define NBT_TRANSPORT_NAME_HEADER   "\\Device\\NetBT_Tcpip_"

Definition at line 84 of file wksta.c.

◆ UNKNOWN_TRANSPORT_NAME_HEADER

#define UNKNOWN_TRANSPORT_NAME_HEADER   "\\Device\\UnknownTransport_"

Definition at line 85 of file wksta.c.

Function Documentation

◆ I_NetNameCompare()

NET_API_STATUS WINAPI I_NetNameCompare ( LPVOID  p1,
LPWSTR  wkgrp,
LPWSTR  comp,
LPVOID  p4,
LPVOID  p5 
)

Definition at line 298 of file wksta.c.

300{
301 FIXME("(%p %s %s %p %p): stub\n", p1, debugstr_w(wkgrp), debugstr_w(comp),
302 p4, p5);
304}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define debugstr_w
Definition: kernel32.h:32

◆ I_NetNameValidate()

NET_API_STATUS WINAPI I_NetNameValidate ( LPVOID  p1,
LPWSTR  wkgrp,
LPVOID  p3,
LPVOID  p4 
)

Definition at line 306 of file wksta.c.

308{
309 FIXME("(%p %s %p %p): stub\n", p1, debugstr_w(wkgrp), p3, p4);
311}

◆ NETAPI_IsLocalComputer()

DECLSPEC_HIDDEN BOOL NETAPI_IsLocalComputer ( LMCSTR  name)

Definition at line 33 of file wksta.c.

34{
36 DWORD size = sizeof(buf) / sizeof(buf[0]);
37 BOOL ret;
38
39 if (!name || !name[0]) return TRUE;
40
42 if (ret && name[0] == '\\' && name[1] == '\\') name += 2;
43 return ret && !strcmpiW( name, buf );
44}
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:446
#define TRUE
Definition: types.h:120
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define strcmpiW(s1, s2)
Definition: unicode.h:45
Definition: name.c:39
int ret
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:269
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by NetWkstaTransportEnum().

◆ NetpGetComputerName()

NET_API_STATUS WINAPI NetpGetComputerName ( LPWSTR Buffer)

Definition at line 279 of file wksta.c.

280{
282
283 TRACE("(%p)\n", Buffer);
286 {
288 *Buffer, (dwSize + 1) * sizeof(WCHAR),
289 (LPVOID *) Buffer);
290 }
291 else
292 {
295 }
296}
Definition: bufpool.h:45
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
Definition: apibuf.c:43
NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID *Buffer)
Definition: apibuf.c:28
NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount, LPVOID *NewBuffer)
Definition: apibuf.c:53
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define TRACE(s)
Definition: solgame.cpp:4

◆ NetWkstaTransportEnum()

NET_API_STATUS WINAPI NetWkstaTransportEnum ( LMSTR  ServerName,
DWORD  level,
PBYTE pbuf,
DWORD  prefmaxlen,
LPDWORD  read_entries,
PDWORD  total_entries,
PDWORD  hresume 
)

Definition at line 221 of file wksta.c.

224{
226
227 TRACE(":%s, 0x%08x, %p, 0x%08x, %p, %p, %p\n", debugstr_w(ServerName),
228 level, pbuf, prefmaxlen, read_entries, total_entries,hresume);
229 if (!NETAPI_IsLocalComputer(ServerName))
230 {
231 FIXME(":not implemented for non-local computers\n");
233 }
234 else
235 {
236 if (hresume && *hresume)
237 {
238 FIXME(":resume handle not implemented\n");
239 return ERROR_INVALID_LEVEL;
240 }
241
242 switch (level)
243 {
244 case 0: /* transport info */
245 {
246 ULONG allTransports;
247 struct WkstaTransportEnumData enumData;
248
249 if (NetBIOSNumAdapters() == 0)
251 if (!read_entries)
253 if (!total_entries || !pbuf)
255
256 enumData.prefmaxlen = prefmaxlen;
257 enumData.pbuf = pbuf;
258 memcpy(&allTransports, ALL_TRANSPORTS, sizeof(ULONG));
260 &enumData);
261 *read_entries = enumData.n_read;
262 *total_entries = enumData.n_adapt;
263 if (hresume) *hresume= 0;
264 ret = enumData.ret;
265 break;
266 }
267 default:
268 TRACE("Invalid level %d is specified\n", level);
270 }
271 }
272 return ret;
273}
UCHAR NetBIOSNumAdapters(void)
Definition: netbios.c:284
void NetBIOSEnumAdapters(ULONG transport, NetBIOSEnumAdaptersCallback cb, void *closure)
Definition: netbios.c:296
DECLSPEC_HIDDEN BOOL NETAPI_IsLocalComputer(LMCSTR name)
Definition: wksta.c:33
static BOOL WkstaEnumAdaptersCallback(UCHAR totalLANAs, UCHAR lanaIndex, ULONG transport, const NetBIOSAdapterImpl *data, void *closure)
Definition: wksta.c:128
GLint level
Definition: gl.h:1546
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
DWORD NET_API_STATUS
Definition: ms-dtyp.idl:91
#define ALL_TRANSPORTS
Definition: nb30.h:23
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:242
Definition: pbuf.h:186
uint32_t ULONG
Definition: typedefs.h:59
#define ERROR_INVALID_LEVEL
Definition: winerror.h:196
#define ERROR_NETWORK_UNREACHABLE
Definition: winerror.h:734
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1087

Referenced by DisplayWorkstationConfig().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( netapi32  )

◆ WkstaEnumAdaptersCallback()

static BOOL WkstaEnumAdaptersCallback ( UCHAR  totalLANAs,
UCHAR  lanaIndex,
ULONG  transport,
const NetBIOSAdapterImpl data,
void closure 
)
static

Definition at line 128 of file wksta.c.

130{
131 BOOL ret;
132 struct WkstaTransportEnumData *enumData = closure;
133
134 if (enumData && enumData->pbuf)
135 {
136 if (lanaIndex == 0)
137 {
138 DWORD toAllocate;
139
140 enumData->n_adapt = totalLANAs;
141 enumData->n_read = 0;
142
143 toAllocate = totalLANAs * (sizeof(WKSTA_TRANSPORT_INFO_0)
144 + MAX_TRANSPORT_NAME * sizeof(WCHAR) +
145 MAX_TRANSPORT_ADDR * sizeof(WCHAR));
146 if (enumData->prefmaxlen != MAX_PREFERRED_LENGTH)
147 toAllocate = enumData->prefmaxlen;
148 NetApiBufferAllocate(toAllocate, (LPVOID *)enumData->pbuf);
149 }
150 if (*(enumData->pbuf))
151 {
152 UCHAR spaceFor;
153
154 if (enumData->prefmaxlen == MAX_PREFERRED_LENGTH)
155 spaceFor = totalLANAs;
156 else
157 spaceFor = enumData->prefmaxlen /
159 MAX_TRANSPORT_ADDR) * sizeof(WCHAR));
160 if (enumData->n_read < spaceFor)
161 {
163 LMSTR transport_name, transport_addr;
164 MIB_IFROW ifRow;
165
166 ti = (PWKSTA_TRANSPORT_INFO_0)(*(enumData->pbuf) +
167 enumData->n_read * sizeof(WKSTA_TRANSPORT_INFO_0));
168 transport_name = (LMSTR)(*(enumData->pbuf) +
169 totalLANAs * sizeof(WKSTA_TRANSPORT_INFO_0) +
170 enumData->n_read * MAX_TRANSPORT_NAME * sizeof(WCHAR));
171 transport_addr = (LMSTR)(*(enumData->pbuf) +
172 totalLANAs * (sizeof(WKSTA_TRANSPORT_INFO_0) +
173 MAX_TRANSPORT_NAME * sizeof(WCHAR)) +
174 enumData->n_read * MAX_TRANSPORT_ADDR * sizeof(WCHAR));
175
176 ifRow.dwIndex = data->ifIndex;
177 GetIfEntry(&ifRow);
179 ti->wkti0_number_of_vcs = 0;
180 ti->wkti0_transport_name = transport_name;
182 transport, &ifRow);
183 ti->wkti0_transport_address = transport_addr;
185 &ifRow);
186 if (!memcmp(&transport, TRANSPORT_NBT, sizeof(ULONG)))
187 ti->wkti0_wan_ish = TRUE;
188 else
189 ti->wkti0_wan_ish = FALSE;
190 TRACE("%d of %d:ti at %p\n", lanaIndex, totalLANAs, ti);
191 TRACE("transport_name at %p %s\n",
194 TRACE("transport_address at %p %s\n",
197 enumData->n_read++;
198 enumData->ret = NERR_Success;
199 ret = TRUE;
200 }
201 else
202 {
203 enumData->ret = ERROR_MORE_DATA;
204 ret = FALSE;
205 }
206 }
207 else
208 {
209 enumData->ret = ERROR_OUTOFMEMORY;
210 ret = FALSE;
211 }
212 }
213 else
214 ret = FALSE;
215 return ret;
216}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define FALSE
Definition: types.h:117
static void wprint_name(WCHAR *buffer, int len, ULONG transport, PMIB_IFROW ifRow)
Definition: wksta.c:87
#define MAX_TRANSPORT_ADDR
Definition: wksta.c:82
static void wprint_mac(WCHAR *buffer, int len, const MIB_IFROW *ifRow)
Definition: wksta.c:46
#define MAX_TRANSPORT_NAME
Definition: wksta.c:81
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow)
#define LMSTR
Definition: lmcons.h:68
#define MAX_PREFERRED_LENGTH
Definition: lmcons.h:48
#define NERR_Success
Definition: lmerr.h:5
struct _WKSTA_TRANSPORT_INFO_0 WKSTA_TRANSPORT_INFO_0
struct _WKSTA_TRANSPORT_INFO_0 * PWKSTA_TRANSPORT_INFO_0
WCHAR * LMSTR
Definition: ms-dtyp.idl:119
#define TRANSPORT_NBT
Definition: netbios.h:173
NET_API_STATUS ret
Definition: wksta.c:123
DWORD dwIndex
Definition: ifmib.h:38
LPWSTR wkti0_transport_address
Definition: lmwksta.h:214
LPWSTR wkti0_transport_name
Definition: lmwksta.h:213
DWORD wkti0_quality_of_service
Definition: lmwksta.h:211
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by NetWkstaTransportEnum().

◆ wprint_mac()

static void wprint_mac ( WCHAR buffer,
int  len,
const MIB_IFROW ifRow 
)
static

Definition at line 46 of file wksta.c.

47{
48 int i;
49 unsigned char val;
50
51 if (!buffer)
52 return;
53 if (len < 1)
54 return;
55 if (!ifRow)
56 {
57 *buffer = '\0';
58 return;
59 }
60
61 for (i = 0; i < ifRow->dwPhysAddrLen && 2 * i < len; i++)
62 {
63 val = ifRow->bPhysAddr[i];
64 if ((val >>4) >9)
65 buffer[2*i] = (WCHAR)((val >>4) + 'A' - 10);
66 else
67 buffer[2*i] = (WCHAR)((val >>4) + '0');
68 if ((val & 0xf ) >9)
69 buffer[2*i+1] = (WCHAR)((val & 0xf) + 'A' - 10);
70 else
71 buffer[2*i+1] = (WCHAR)((val & 0xf) + '0');
72 }
73 buffer[2*i]=0;
74}
GLuint buffer
Definition: glext.h:5915
GLuint GLfloat * val
Definition: glext.h:7180
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
UCHAR bPhysAddr[MAXLEN_PHYSADDR]
Definition: ifmib.h:43
DWORD dwPhysAddrLen
Definition: ifmib.h:42

Referenced by WkstaEnumAdaptersCallback().

◆ wprint_name()

static void wprint_name ( WCHAR buffer,
int  len,
ULONG  transport,
PMIB_IFROW  ifRow 
)
static

Definition at line 87 of file wksta.c.

89{
90 WCHAR *ptr1, *ptr2;
91 const char *name;
92
93 if (!buffer)
94 return;
95 if (!ifRow)
96 {
97 *buffer = '\0';
98 return;
99 }
100
101 if (!memcmp(&transport, TRANSPORT_NBT, sizeof(ULONG)))
103 else
105
106 for (ptr1 = buffer; *name && ptr1 < buffer + len; ptr1++, name++)
107 *ptr1 = *name;
108 for (ptr2 = ifRow->wszName; *ptr2 && ptr1 < buffer + len; ptr1++, ptr2++)
109 *ptr1 = *ptr2;
110 *ptr1 = '\0';
111}
#define UNKNOWN_TRANSPORT_NAME_HEADER
Definition: wksta.c:85
#define NBT_TRANSPORT_NAME_HEADER
Definition: wksta.c:84
WCHAR wszName[MAX_INTERFACE_NAME_LEN]
Definition: ifmib.h:37

Referenced by WkstaEnumAdaptersCallback().