Sweden-Number/dlls/netapi32/netapi32.c

280 lines
8.6 KiB
C
Raw Normal View History

2003-11-29 01:19:19 +01:00
/* Copyright 2001 Mike McCormack
* Copyright 2002 Andriy Palamarchuk
2003-11-29 01:19:19 +01:00
* Copyright 2003 Juan Lang
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include "wine/debug.h"
#include "lm.h"
#include "lmat.h"
2003-11-29 01:19:19 +01:00
#include "netbios.h"
WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
BOOL NETAPI_IsLocalComputer(LMCSTR ServerName);
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved);
switch (fdwReason) {
2003-11-29 01:19:19 +01:00
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
2003-11-29 01:19:19 +01:00
NetBIOSInit();
NetBTInit();
break;
case DLL_PROCESS_DETACH:
if (lpvReserved) break;
2003-11-29 01:19:19 +01:00
NetBIOSShutdown();
break;
}
return TRUE;
}
/************************************************************
* NetServerEnum (NETAPI32.@)
*/
2003-05-20 01:06:35 +02:00
NET_API_STATUS WINAPI NetServerEnum(
LMCSTR servername,
2003-05-20 01:06:35 +02:00
DWORD level,
LPBYTE* bufptr,
DWORD prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
DWORD servertype,
LMCSTR domain,
2003-05-20 01:06:35 +02:00
LPDWORD resume_handle
)
{
FIXME("Stub (%s %d %p %d %p %p %d %s %p)\n", debugstr_w(servername),
level, bufptr, prefmaxlen, entriesread, totalentries, servertype,
debugstr_w(domain), resume_handle);
2003-05-20 01:06:35 +02:00
return ERROR_NO_BROWSER_SERVERS_FOUND;
}
2003-09-11 05:09:19 +02:00
/************************************************************
* NetServerEnumEx (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetServerEnumEx(
LMCSTR ServerName,
DWORD Level,
LPBYTE *Bufptr,
DWORD PrefMaxlen,
LPDWORD EntriesRead,
LPDWORD totalentries,
DWORD servertype,
LMCSTR domain,
LMCSTR FirstNameToReturn)
{
FIXME("Stub (%s %d %p %d %p %p %d %s %s)\n",
debugstr_w(ServerName), Level, Bufptr, PrefMaxlen, EntriesRead, totalentries,
servertype, debugstr_w(domain), debugstr_w(FirstNameToReturn));
return ERROR_NO_BROWSER_SERVERS_FOUND;
}
2003-09-11 05:09:19 +02:00
/************************************************************
* NetServerDiskEnum (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetServerDiskEnum(
LMCSTR ServerName,
DWORD Level,
LPBYTE *Bufptr,
DWORD PrefMaxlen,
LPDWORD EntriesRead,
LPDWORD totalentries,
LPDWORD Resume_Handle)
{
FIXME("Stub (%s %d %p %d %p %p %p)\n", debugstr_w(ServerName),
Level, Bufptr, PrefMaxlen, EntriesRead, totalentries, Resume_Handle);
return ERROR_NO_BROWSER_SERVERS_FOUND;
}
2004-04-02 21:17:42 +02:00
/************************************************************
* NetServerGetInfo (NETAPI32.@)
*/
2005-11-21 12:59:27 +01:00
NET_API_STATUS WINAPI NetServerGetInfo(LMSTR servername, DWORD level, LPBYTE* bufptr)
2004-04-02 21:17:42 +02:00
{
NET_API_STATUS ret;
TRACE("%s %d %p\n", debugstr_w( servername ), level, bufptr );
if (servername)
{
if (!NETAPI_IsLocalComputer(servername))
{
FIXME("remote computers not supported\n");
return ERROR_INVALID_LEVEL;
}
}
if (!bufptr) return ERROR_INVALID_PARAMETER;
switch (level)
{
case 100:
case 101:
{
DWORD computerNameLen, size;
WCHAR computerName[MAX_COMPUTERNAME_LENGTH + 1];
computerNameLen = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerNameW(computerName, &computerNameLen);
computerNameLen++; /* include NULL terminator */
size = sizeof(SERVER_INFO_101) + computerNameLen * sizeof(WCHAR);
ret = NetApiBufferAllocate(size, (LPVOID *)bufptr);
if (ret == NERR_Success)
{
/* INFO_100 structure is a subset of INFO_101 */
PSERVER_INFO_101 info = (PSERVER_INFO_101)*bufptr;
OSVERSIONINFOW verInfo;
info->sv101_platform_id = PLATFORM_ID_NT;
info->sv101_name = (LMSTR)(*bufptr + sizeof(SERVER_INFO_101));
memcpy(info->sv101_name, computerName,
computerNameLen * sizeof(WCHAR));
verInfo.dwOSVersionInfoSize = sizeof(verInfo);
GetVersionExW(&verInfo);
info->sv101_version_major = verInfo.dwMajorVersion;
info->sv101_version_minor = verInfo.dwMinorVersion;
/* Use generic type as no wine equivalent of DC / Server */
info->sv101_type = SV_TYPE_NT;
info->sv101_comment = NULL;
}
break;
}
default:
FIXME("level %d unimplemented\n", level);
ret = ERROR_INVALID_LEVEL;
}
return ret;
2004-04-02 21:17:42 +02:00
}
2003-09-11 05:09:19 +02:00
/************************************************************
* NetStatisticsGet (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetStatisticsGet(LMSTR server, LMSTR service,
2003-09-11 05:09:19 +02:00
DWORD level, DWORD options,
LPBYTE *bufptr)
{
TRACE("(%p, %p, %d, %d, %p)\n", server, service, level, options, bufptr);
2003-09-11 05:09:19 +02:00
return NERR_InternalError;
}
2007-10-30 21:34:48 +01:00
NET_API_STATUS WINAPI NetUseEnum(LMSTR server, DWORD level, LPBYTE* bufptr, DWORD prefmaxsize,
LPDWORD entriesread, LPDWORD totalentries, LPDWORD resumehandle)
{
FIXME("stub (%p, %d, %p, %d, %p, %p, %p)\n", server, level, bufptr, prefmaxsize,
entriesread, totalentries, resumehandle);
return ERROR_NOT_SUPPORTED;
}
NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR server, LPBYTE bufptr, LPDWORD jobid)
{
FIXME("stub (%s, %p, %p)\n", debugstr_w(server), bufptr, jobid);
return NERR_Success;
}
NET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR server, LPBYTE* bufptr, DWORD prefmaxsize, LPDWORD entriesread,
LPDWORD totalentries, LPDWORD resumehandle)
{
FIXME("stub (%s, %p, %d, %p, %p, %p)\n", debugstr_w(server), bufptr, prefmaxsize, entriesread, totalentries, resumehandle);
*entriesread = 0;
*totalentries = 0;
return NERR_Success;
}
NET_API_STATUS WINAPI NetUseGetInfo(LMSTR server, LMSTR name, DWORD level, LPBYTE *bufptr)
{
FIXME("stub (%p, %p, %d, %p)\n", server, name, level, bufptr);
return ERROR_NOT_SUPPORTED;
}
/************************************************************
* NetApiBufferAllocate (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer)
{
TRACE("(%d, %p)\n", ByteCount, Buffer);
if (Buffer == NULL) return ERROR_INVALID_PARAMETER;
*Buffer = HeapAlloc(GetProcessHeap(), 0, ByteCount);
if (*Buffer)
return NERR_Success;
else
return GetLastError();
}
/************************************************************
* NetApiBufferFree (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
{
TRACE("(%p)\n", Buffer);
HeapFree(GetProcessHeap(), 0, Buffer);
return NERR_Success;
}
/************************************************************
* NetApiBufferReallocate (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,
LPVOID* NewBuffer)
{
TRACE("(%p, %d, %p)\n", OldBuffer, NewByteCount, NewBuffer);
if (NewByteCount)
{
if (OldBuffer)
*NewBuffer = HeapReAlloc(GetProcessHeap(), 0, OldBuffer, NewByteCount);
else
*NewBuffer = HeapAlloc(GetProcessHeap(), 0, NewByteCount);
return *NewBuffer ? NERR_Success : GetLastError();
}
else
{
if (!HeapFree(GetProcessHeap(), 0, OldBuffer)) return GetLastError();
*NewBuffer = 0;
return NERR_Success;
}
}
/************************************************************
* NetApiBufferSize (NETAPI32.@)
*/
NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount)
{
DWORD dw;
TRACE("(%p, %p)\n", Buffer, ByteCount);
if (Buffer == NULL)
return ERROR_INVALID_PARAMETER;
dw = HeapSize(GetProcessHeap(), 0, Buffer);
TRACE("size: %d\n", dw);
if (dw != 0xFFFFFFFF)
*ByteCount = dw;
else
*ByteCount = 0;
return NERR_Success;
}