ReactOS  0.4.14-dev-55-g2da92ac
wksta.c
Go to the documentation of this file.
1 /* Copyright 2002 Andriy Palamarchuk
2  * Copyright (c) 2003 Juan Lang
3  *
4  * netapi32 user functions
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include "netapi32.h"
22 
23 #include <lmwksta.h>
24 #include <lmjoin.h>
25 
27 
28 /************************************************************
29  * NETAPI_IsLocalComputer
30  *
31  * Checks whether the server name indicates local machine.
32  */
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 }
45 
46 static void wprint_mac(WCHAR* buffer, int len, const MIB_IFROW *ifRow)
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 }
75 
76 /* Theoretically this could be too short, except that MS defines
77  * MAX_ADAPTER_NAME as 128, and MAX_INTERFACE_NAME_LEN as 256, and both
78  * represent a count of WCHARs, so even with an extraordinarily long header
79  * this will be plenty
80  */
81 #define MAX_TRANSPORT_NAME MAX_INTERFACE_NAME_LEN
82 #define MAX_TRANSPORT_ADDR 13
83 
84 #define NBT_TRANSPORT_NAME_HEADER "\\Device\\NetBT_Tcpip_"
85 #define UNKNOWN_TRANSPORT_NAME_HEADER "\\Device\\UnknownTransport_"
86 
87 static void wprint_name(WCHAR *buffer, int len, ULONG transport,
88  PMIB_IFROW ifRow)
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 }
112 
113 /***********************************************************************
114  * NetWkstaTransportEnum (NETAPI32.@)
115  */
116 
118 {
124 };
125 
126 /**********************************************************************/
127 
128 static BOOL WkstaEnumAdaptersCallback(UCHAR totalLANAs, UCHAR lanaIndex,
129  ULONG transport, const NetBIOSAdapterImpl *data, void *closure)
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);
178  ti->wkti0_quality_of_service = 0;
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 }
217 
218 /**********************************************************************/
219 
222  DWORD prefmaxlen, LPDWORD read_entries,
223  PDWORD total_entries, PDWORD hresume)
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)
254  return RPC_X_NULL_REF_POINTER;
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 }
274 
275 
276 /************************************************************
277  * NetWkstaUserGetInfo (NETAPI32.@)
278  */
280  PBYTE* bufptr)
281 {
282  NET_API_STATUS nastatus;
283 
284  TRACE("(%s, %d, %p)\n", debugstr_w(reserved), level, bufptr);
285  switch (level)
286  {
287  case 0:
288  {
290  DWORD dwSize = UNLEN + 1;
291 
292  /* set up buffer */
293  nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_0) + dwSize * sizeof(WCHAR),
294  (LPVOID *) bufptr);
295  if (nastatus != NERR_Success)
297 
299  ui->wkui0_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0));
300 
301  /* get data */
302  if (!GetUserNameW(ui->wkui0_username, &dwSize))
303  {
306  }
307  else {
308  nastatus = NetApiBufferReallocate(
309  *bufptr, sizeof(WKSTA_USER_INFO_0) +
310  (lstrlenW(ui->wkui0_username) + 1) * sizeof(WCHAR),
311  (LPVOID *) bufptr);
312  if (nastatus != NERR_Success)
313  {
315  return nastatus;
316  }
318  ui->wkui0_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0));
319  }
320  break;
321  }
322 
323  case 1:
324  {
326  PWKSTA_USER_INFO_0 ui0;
328  LSA_HANDLE PolicyHandle;
329  PPOLICY_ACCOUNT_DOMAIN_INFO DomainInfo;
330  NTSTATUS NtStatus;
331 
332  /* sizes of the field buffers in WCHARS */
333  int username_sz, logon_domain_sz, oth_domains_sz, logon_server_sz;
334 
335  FIXME("Level 1 processing is partially implemented\n");
336  oth_domains_sz = 1;
337  logon_server_sz = 1;
338 
339  /* get some information first to estimate size of the buffer */
340  ui0 = NULL;
341  nastatus = NetWkstaUserGetInfo(NULL, 0, (PBYTE *) &ui0);
342  if (nastatus != NERR_Success)
343  return nastatus;
344  username_sz = lstrlenW(ui0->wkui0_username) + 1;
345 
347  NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes,
349  &PolicyHandle);
350  if (NtStatus != STATUS_SUCCESS)
351  {
352  TRACE("LsaOpenPolicyFailed with NT status %x\n",
353  LsaNtStatusToWinError(NtStatus));
354  NetApiBufferFree(ui0);
356  }
358  (PVOID*) &DomainInfo);
359  logon_domain_sz = lstrlenW(DomainInfo->DomainName.Buffer) + 1;
360  LsaClose(PolicyHandle);
361 
362  /* set up buffer */
363  nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1) +
364  (username_sz + logon_domain_sz +
365  oth_domains_sz + logon_server_sz) * sizeof(WCHAR),
366  (LPVOID *) bufptr);
367  if (nastatus != NERR_Success) {
368  NetApiBufferFree(ui0);
369  return nastatus;
370  }
371  ui = (WKSTA_USER_INFO_1 *) *bufptr;
372  ui->wkui1_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_1));
373  ui->wkui1_logon_domain = (LMSTR) (
374  ((PBYTE) ui->wkui1_username) + username_sz * sizeof(WCHAR));
375  ui->wkui1_oth_domains = (LMSTR) (
376  ((PBYTE) ui->wkui1_logon_domain) +
377  logon_domain_sz * sizeof(WCHAR));
378  ui->wkui1_logon_server = (LMSTR) (
379  ((PBYTE) ui->wkui1_oth_domains) +
380  oth_domains_sz * sizeof(WCHAR));
381 
382  /* get data */
383  lstrcpyW(ui->wkui1_username, ui0->wkui0_username);
384  NetApiBufferFree(ui0);
385 
386  lstrcpynW(ui->wkui1_logon_domain, DomainInfo->DomainName.Buffer,
387  logon_domain_sz);
388  LsaFreeMemory(DomainInfo);
389 
390  /* FIXME. Not implemented. Populated with empty strings */
391  ui->wkui1_oth_domains[0] = 0;
392  ui->wkui1_logon_server[0] = 0;
393  break;
394  }
395  case 1101:
396  {
398  DWORD dwSize = 1;
399 
400  FIXME("Stub. Level 1101 processing is not implemented\n");
401  /* FIXME see also wkui1_oth_domains for level 1 */
402 
403  /* set up buffer */
404  nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1101) + dwSize * sizeof(WCHAR),
405  (LPVOID *) bufptr);
406  if (nastatus != NERR_Success)
407  return nastatus;
409  ui->wkui1101_oth_domains = (LMSTR)(ui + 1);
410 
411  /* get data */
412  ui->wkui1101_oth_domains[0] = 0;
413  break;
414  }
415  default:
416  TRACE("Invalid level %d is specified\n", level);
417  return ERROR_INVALID_LEVEL;
418  }
419  return NERR_Success;
420 }
421 
422 /************************************************************
423  * NetWkstaUserEnum (NETAPI32.@)
424  */
427  DWORD prefmaxlen, LPDWORD entriesread,
428  LPDWORD totalentries, LPDWORD resumehandle)
429 {
430  FIXME("(%s, %d, %p, %d, %p, %p, %p): stub!\n", debugstr_w(servername),
431  level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
433 }
434 
435 /************************************************************
436  * NetpGetComputerName (NETAPI32.@)
437  */
439 {
441 
442  TRACE("(%p)\n", Buffer);
445  {
446  return NetApiBufferReallocate(
447  *Buffer, (dwSize + 1) * sizeof(WCHAR),
448  (LPVOID *) Buffer);
449  }
450  else
451  {
454  }
455 }
456 
458  LPVOID p4, LPVOID p5)
459 {
460  FIXME("(%p %s %s %p %p): stub\n", p1, debugstr_w(wkgrp), debugstr_w(comp),
461  p4, p5);
463 }
464 
466  LPVOID p4)
467 {
468  FIXME("(%p %s %p %p): stub\n", p1, debugstr_w(wkgrp), p3, p4);
470 }
471 
473  LPBYTE* bufptr)
474 {
476 
477  TRACE("%s %d %p\n", debugstr_w( servername ), level, bufptr );
478  if (servername)
479  {
480  if (!NETAPI_IsLocalComputer(servername))
481  {
482  FIXME("remote computers not supported\n");
483  return ERROR_INVALID_LEVEL;
484  }
485  }
486  if (!bufptr) return ERROR_INVALID_PARAMETER;
487 
488  switch (level)
489  {
490  case 100:
491  case 101:
492  case 102:
493  {
494  static const WCHAR lanroot[] = {'c',':','\\','l','a','n','m','a','n',0}; /* FIXME */
495  DWORD computerNameLen, domainNameLen, size;
496  WCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
498  LSA_HANDLE PolicyHandle;
499  NTSTATUS NtStatus;
500 
501  computerNameLen = MAX_COMPUTERNAME_LENGTH + 1;
502  GetComputerNameW(computerName, &computerNameLen);
503  computerNameLen++; /* include NULL terminator */
504 
506  NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes,
507  POLICY_VIEW_LOCAL_INFORMATION, &PolicyHandle);
508  if (NtStatus != STATUS_SUCCESS)
509  ret = LsaNtStatusToWinError(NtStatus);
510  else
511  {
512  PPOLICY_PRIMARY_DOMAIN_INFO DomainInfo;
513 
514  LsaQueryInformationPolicy(PolicyHandle,
515  PolicyPrimaryDomainInformation, (PVOID*)&DomainInfo);
516  domainNameLen = lstrlenW(DomainInfo->Name.Buffer) + 1;
517  size = sizeof(WKSTA_INFO_102) + computerNameLen * sizeof(WCHAR)
518  + domainNameLen * sizeof(WCHAR) + sizeof(lanroot);
520  if (ret == NERR_Success)
521  {
522  /* INFO_100 and INFO_101 structures are subsets of INFO_102 */
524  OSVERSIONINFOW verInfo;
525 
526  info->wki102_platform_id = PLATFORM_ID_NT;
527  info->wki102_computername = (LMSTR)(*bufptr +
528  sizeof(WKSTA_INFO_102));
529  memcpy(info->wki102_computername, computerName,
530  computerNameLen * sizeof(WCHAR));
531  info->wki102_langroup = info->wki102_computername + computerNameLen;
532  memcpy(info->wki102_langroup, DomainInfo->Name.Buffer,
533  domainNameLen * sizeof(WCHAR));
534  info->wki102_lanroot = info->wki102_langroup + domainNameLen;
535  memcpy(info->wki102_lanroot, lanroot, sizeof(lanroot));
536  memset(&verInfo, 0, sizeof(verInfo));
537  verInfo.dwOSVersionInfoSize = sizeof(verInfo);
538  GetVersionExW(&verInfo);
539  info->wki102_ver_major = verInfo.dwMajorVersion;
540  info->wki102_ver_minor = verInfo.dwMinorVersion;
541  info->wki102_logged_on_users = 1;
542  }
543  LsaFreeMemory(DomainInfo);
544  LsaClose(PolicyHandle);
545  }
546  break;
547  }
548 
549  default:
550  FIXME("level %d unimplemented\n", level);
552  }
553  return ret;
554 }
555 
556 /************************************************************
557  * NetGetJoinInformation (NETAPI32.@)
558  */
560  LPCWSTR Server,
561  LPWSTR *Name,
563 {
564  FIXME("Stub %s %p %p\n", wine_dbgstr_w(Server), Name, type);
565 
566  if (Name == NULL || type == NULL)
568 
569  *Name = NULL;
571 
572  return NERR_Success;
573 }
NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID *Buffer)
Definition: apibuf.c:28
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define MAX_PREFERRED_LENGTH
Definition: lmcons.h:48
GLint level
Definition: gl.h:1546
WCHAR * LMSTR
Definition: ms-dtyp.idl:119
WCHAR wszName[MAX_INTERFACE_NAME_LEN]
Definition: ifmib.h:37
#define TRUE
Definition: types.h:120
NET_API_STATUS WINAPI I_NetNameCompare(LPVOID p1, LPWSTR wkgrp, LPWSTR comp, LPVOID p4, LPVOID p5)
Definition: wksta.c:457
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define RPC_X_NULL_REF_POINTER
Definition: winerror.h:1087
static unsigned int bufptr
Definition: tncon.cpp:77
NTSTATUS WINAPI LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, IN POLICY_INFORMATION_CLASS InformationClass, OUT PVOID *Buffer)
Definition: lsa.c:1471
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPWSTR wkti0_transport_address
Definition: lmwksta.h:214
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define POLICY_VIEW_LOCAL_INFORMATION
Definition: ntsecapi.h:61
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
UINT ui
Definition: oleauto.h:49
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS WINAPI LsaClose(IN LSA_HANDLE ObjectHandle)
Definition: lsa.c:192
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define ZeroMemory
Definition: winbase.h:1635
GLuint buffer
Definition: glext.h:5915
NET_API_STATUS NET_API_FUNCTION NetGetJoinInformation(LPCWSTR Server, LPWSTR *Name, PNETSETUP_JOIN_STATUS type)
Definition: wksta.c:559
NET_API_STATUS ret
Definition: wksta.c:123
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
Definition: compname.c:440
static void Server(int port)
Definition: srltest.c:69
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
#define lstrlenW
Definition: compat.h:407
UCHAR NetBIOSNumAdapters(void)
Definition: netbios.c:284
void NetBIOSEnumAdapters(ULONG transport, NetBIOSEnumAdaptersCallback cb, void *closure)
Definition: netbios.c:296
#define lstrcpynW
Definition: compat.h:397
#define NERR_Success
Definition: lmerr.h:5
const wchar_t * LMCSTR
Definition: ms-dtyp.idl:118
NTSTATUS WINAPI LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName OPTIONAL, IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, IN ACCESS_MASK DesiredAccess, OUT PLSA_HANDLE PolicyHandle)
Definition: lsa.c:1181
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
unsigned char * LPBYTE
Definition: typedefs.h:52
DWORD wkti0_quality_of_service
Definition: lmwksta.h:211
unsigned int BOOL
Definition: ntddk_ex.h:94
static void wprint_name(WCHAR *buffer, int len, ULONG transport, PMIB_IFROW ifRow)
Definition: wksta.c:87
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
NET_API_STATUS WINAPI I_NetNameValidate(LPVOID p1, LPWSTR wkgrp, LPVOID p3, LPVOID p4)
Definition: wksta.c:465
r reserved
Definition: btrfs.c:2893
WINE_DEFAULT_DEBUG_CHANNEL(netapi32)
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
Definition: lsa.c:699
#define MAX_TRANSPORT_NAME
Definition: wksta.c:81
LPWSTR wkti0_transport_name
Definition: lmwksta.h:213
GLuint GLfloat * val
Definition: glext.h:7180
DWORD NET_API_STATUS
Definition: ms-dtyp.idl:91
NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount, LPVOID *NewBuffer)
Definition: apibuf.c:53
NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level, PBYTE *bufptr)
Definition: wksta.c:279
NET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR servername, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle)
Definition: wksta.c:426
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
Definition: misc.c:291
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
ULONG dwMajorVersion
Definition: rtltypes.h:243
UCHAR bPhysAddr[MAXLEN_PHYSADDR]
Definition: ifmib.h:43
Definition: pbuf.h:79
__wchar_t WCHAR
Definition: xmlstorage.h:180
ULONG WINAPI LsaNtStatusToWinError(IN NTSTATUS Status)
Definition: lsa.c:1129
#define MAX_TRANSPORT_ADDR
Definition: wksta.c:82
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:242
struct _WKSTA_INFO_102 * PWKSTA_INFO_102
#define WINAPI
Definition: msvc.h:8
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define NET_API_FUNCTION
Definition: lmcons.h:7
struct _WKSTA_INFO_102 WKSTA_INFO_102
unsigned char UCHAR
Definition: xmlstorage.h:181
int ret
#define NBT_TRANSPORT_NAME_HEADER
Definition: wksta.c:84
NET_API_STATUS WINAPI NetWkstaGetInfo(LMSTR servername, DWORD level, LPBYTE *bufptr)
Definition: wksta.c:472
struct _WKSTA_TRANSPORT_INFO_0 WKSTA_TRANSPORT_INFO_0
DWORD dwPhysAddrLen
Definition: ifmib.h:42
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define strcmpiW(s1, s2)
Definition: unicode.h:39
static BOOL WkstaEnumAdaptersCallback(UCHAR totalLANAs, UCHAR lanaIndex, ULONG transport, const NetBIOSAdapterImpl *data, void *closure)
Definition: wksta.c:128
#define TRANSPORT_NBT
Definition: netbios.h:173
#define MAX_COMPUTERNAME_LENGTH
Definition: winbase.h:240
struct _WKSTA_USER_INFO_1101 * PWKSTA_USER_INFO_1101
#define PLATFORM_ID_NT
Definition: lmcons.h:60
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
Definition: apibuf.c:43
#define lstrcpyW
Definition: compat.h:406
#define STATUS_ACCESS_VIOLATION
Definition: ntstatus.h:228
#define ERROR_NETWORK_UNREACHABLE
Definition: winerror.h:734
#define UNLEN
Definition: sspi.c:28
NET_API_STATUS WINAPI NetpGetComputerName(LPWSTR *Buffer)
Definition: wksta.c:438
enum tagNETSETUP_JOIN_STATUS * PNETSETUP_JOIN_STATUS
DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow)
#define UNKNOWN_TRANSPORT_NAME_HEADER
Definition: wksta.c:85
DWORD * PDWORD
Definition: pedump.c:68
ULONG dwMinorVersion
Definition: rtltypes.h:244
NET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE *pbuf, DWORD prefmaxlen, LPDWORD read_entries, PDWORD total_entries, PDWORD hresume)
Definition: wksta.c:221
Definition: name.c:36
uint32_t * LPDWORD
Definition: typedefs.h:57
unsigned int ULONG
Definition: retypes.h:1
DECLSPEC_HIDDEN BOOL NETAPI_IsLocalComputer(LMCSTR name)
Definition: wksta.c:33
DWORD dwIndex
Definition: ifmib.h:38
#define ERROR_INVALID_LEVEL
Definition: winerror.h:196
static void wprint_mac(WCHAR *buffer, int len, const MIB_IFROW *ifRow)
Definition: wksta.c:46
struct _WKSTA_USER_INFO_0 * PWKSTA_USER_INFO_0
WCHAR * LPWSTR
Definition: xmlstorage.h:184
return STATUS_SUCCESS
Definition: btrfs.c:2966
#define memset(x, y, z)
Definition: compat.h:39
BYTE * PBYTE
Definition: pedump.c:66
struct _WKSTA_TRANSPORT_INFO_0 * PWKSTA_TRANSPORT_INFO_0
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ALL_TRANSPORTS
Definition: nb30.h:23
GLuint const GLchar * name
Definition: glext.h:6031