343 lines
7.6 KiB
C
343 lines
7.6 KiB
C
/*++
|
||
|
||
Copyright (c) 1991 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
msgstub.c
|
||
|
||
Abstract:
|
||
|
||
These are the Messenger Service API RPC client stubs.
|
||
|
||
Author:
|
||
|
||
Dan Lafferty (danl) 06-Feb-1991
|
||
|
||
Environment:
|
||
|
||
User Mode - Win32
|
||
|
||
Revision History:
|
||
|
||
27-Aug-1992 Danl
|
||
Added downlevel support & removed error mapping for RPC errors.
|
||
|
||
06-Feb-1991 Danl
|
||
Created
|
||
|
||
--*/
|
||
|
||
//
|
||
// INCLUDES
|
||
//
|
||
|
||
#include <nt.h> // DbgPrint prototype
|
||
#include <ntrtl.h> // DbgPrint prototype
|
||
#include <rpc.h> // DataTypes and runtime APIs
|
||
|
||
#include <msgsvc.h> // generated by the MIDL complier
|
||
#include <rpcutil.h> // NetRpc utils
|
||
|
||
#include <lmsvc.h>
|
||
#include <lmcons.h> // NET_API_STATUS
|
||
#include <lmerr.h> // NetError codes
|
||
#include <rxmsg.h> // RxNetMessage API
|
||
#include <netlib.h> // NetpServiceIsStarted() (needed by netrpc.h).
|
||
#include <netdebug.h> // needed for netrpc.h
|
||
#include <netrpc.h> // NET_REMOTE macros.
|
||
|
||
|
||
|
||
NET_API_STATUS NET_API_FUNCTION
|
||
NetMessageNameAdd (
|
||
IN LPCWSTR servername,
|
||
IN LPCWSTR msgname
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This is the DLL entrypoint for NetMessageNameAdd. This API adds a name
|
||
to the message name table.
|
||
|
||
Arguments:
|
||
|
||
servername - Pointer to a string containing the name of the computer
|
||
that is to execute the API function.
|
||
|
||
msgname - Pointer to a string containing the name to be added.
|
||
|
||
|
||
Return Value:
|
||
|
||
NERR_Success - The operation was successful.
|
||
|
||
--*/
|
||
{
|
||
NET_API_STATUS apiStatus;
|
||
DWORD OptionsSupported = 0;
|
||
|
||
|
||
NET_REMOTE_TRY_RPC
|
||
|
||
apiStatus = NetrMessageNameAdd ((LPWSTR)servername,(LPWSTR)msgname);
|
||
|
||
NET_REMOTE_RPC_FAILED("NetMessageNameAdd",
|
||
(LPWSTR)servername,
|
||
apiStatus,
|
||
NET_REMOTE_FLAG_NORMAL,
|
||
SERVICE_MESSENGER)
|
||
|
||
//
|
||
// Call downlevel version of the API.
|
||
//
|
||
apiStatus = RxNetMessageNameAdd((LPWSTR)servername,(LPWSTR)msgname);
|
||
|
||
NET_REMOTE_END
|
||
|
||
return(apiStatus);
|
||
}
|
||
|
||
|
||
NET_API_STATUS NET_API_FUNCTION
|
||
NetMessageNameEnum (
|
||
IN LPCWSTR servername,
|
||
IN DWORD level,
|
||
OUT LPBYTE *bufptr,
|
||
IN DWORD prefmaxlen,
|
||
OUT LPDWORD entriesread,
|
||
OUT LPDWORD totalentries,
|
||
IN OUT LPDWORD resume_handle
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This is the DLL entrypoint for NetMessageNameEnum.
|
||
|
||
Arguments:
|
||
|
||
servername - Pointer to a string containing the name of the computer
|
||
that is to execute the API function.
|
||
|
||
level - This indicates the level of information that is desired.
|
||
|
||
bufptr - A pointer to the location where the pointer to the returned
|
||
array of info structures is to be placed.
|
||
|
||
prefmaxlen - Indicates a maximum size limit that the caller will allow
|
||
for the return buffer.
|
||
|
||
entriesread - A pointer to the location where the number of entries
|
||
(data structures)read is to be returned.
|
||
|
||
totalentries - A pointer to the location which upon return indicates
|
||
the total number of entries in the table.
|
||
|
||
resumehandle - Pointer to a value that indicates where to resume
|
||
enumerating data.
|
||
|
||
Return Value:
|
||
|
||
Nerr_Success - The operation was successful.
|
||
|
||
|
||
Note:
|
||
|
||
|
||
--*/
|
||
{
|
||
NET_API_STATUS apiStatus;
|
||
GENERIC_ENUM_STRUCT infoStruct;
|
||
GENERIC_INFO_CONTAINER genericInfoContainer;
|
||
DWORD OptionsSupported = 0;
|
||
|
||
if (level != 0 && level != 1)
|
||
{
|
||
//
|
||
// Return ERROR_INVALID_LEVEL rather than the RPC
|
||
// "invalid level" error when it tries to assemble
|
||
// the union with a bogus level in the stub.
|
||
//
|
||
return ERROR_INVALID_LEVEL;
|
||
}
|
||
|
||
genericInfoContainer.Buffer = NULL;
|
||
genericInfoContainer.EntriesRead = 0;
|
||
|
||
infoStruct.Container = &genericInfoContainer;
|
||
infoStruct.Level = level;
|
||
|
||
|
||
NET_REMOTE_TRY_RPC
|
||
|
||
apiStatus = NetrMessageNameEnum (
|
||
(LPWSTR)servername,
|
||
(LPMSG_ENUM_STRUCT) &infoStruct,
|
||
prefmaxlen,
|
||
totalentries,
|
||
resume_handle);
|
||
|
||
if (apiStatus == NERR_Success || apiStatus == ERROR_MORE_DATA) {
|
||
*bufptr = (LPBYTE) genericInfoContainer.Buffer;
|
||
*entriesread = genericInfoContainer.EntriesRead;
|
||
}
|
||
|
||
NET_REMOTE_RPC_FAILED("NetMessageNameEnum",
|
||
(LPWSTR)servername,
|
||
apiStatus,
|
||
NET_REMOTE_FLAG_NORMAL,
|
||
SERVICE_MESSENGER )
|
||
|
||
//
|
||
// Call downlevel version of the API.
|
||
//
|
||
apiStatus = RxNetMessageNameEnum(
|
||
(LPWSTR)servername,
|
||
level,
|
||
bufptr,
|
||
prefmaxlen,
|
||
entriesread,
|
||
totalentries,
|
||
resume_handle);
|
||
|
||
NET_REMOTE_END
|
||
|
||
|
||
return(apiStatus);
|
||
}
|
||
|
||
|
||
|
||
NET_API_STATUS NET_API_FUNCTION
|
||
NetMessageNameGetInfo (
|
||
IN LPCWSTR servername,
|
||
IN LPCWSTR msgname,
|
||
IN DWORD level,
|
||
OUT LPBYTE *bufptr
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This is the DLL entrypoint for NetMessageNameGetInfo.
|
||
|
||
Arguments:
|
||
|
||
servername - Pointer to a string containing the name of the computer
|
||
that is to execute the API function. Since this function is
|
||
executing on that computer, this information is not useful
|
||
by the time it gets here. It is really only useful on the RPC
|
||
client side.
|
||
|
||
msgname - Pointer to a string containing the name in the table
|
||
for which information is desired.
|
||
|
||
level - This indicates the level of information that is desired.
|
||
|
||
bufptr - Pointer to a Location where the pointer to the returned
|
||
information structure is to be placed.
|
||
|
||
Return Value:
|
||
|
||
NERR_Success - The operation was successful.
|
||
|
||
|
||
--*/
|
||
|
||
{
|
||
NET_API_STATUS apiStatus;
|
||
DWORD OptionsSupported = 0;
|
||
|
||
|
||
*bufptr = NULL; // Must be NULL so RPC knows to till it in.
|
||
|
||
NET_REMOTE_TRY_RPC
|
||
|
||
apiStatus = NetrMessageNameGetInfo (
|
||
(LPWSTR)servername,
|
||
(LPWSTR)msgname,
|
||
level,
|
||
(LPMSG_INFO) bufptr);
|
||
|
||
NET_REMOTE_RPC_FAILED("NetMessageNameGetInfo",
|
||
(LPWSTR)servername,
|
||
apiStatus,
|
||
NET_REMOTE_FLAG_NORMAL,
|
||
SERVICE_MESSENGER)
|
||
|
||
//
|
||
// Call downlevel version of the API.
|
||
//
|
||
apiStatus = RxNetMessageNameGetInfo(
|
||
(LPWSTR)servername,
|
||
(LPWSTR)msgname,
|
||
level,
|
||
bufptr);
|
||
NET_REMOTE_END
|
||
|
||
|
||
return(apiStatus);
|
||
}
|
||
|
||
|
||
NET_API_STATUS NET_API_FUNCTION
|
||
NetMessageNameDel (
|
||
IN LPCWSTR servername,
|
||
IN LPCWSTR msgname
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This is the DLL entrypoint for NetMessageNameDel. This API deletes
|
||
a name from the message name table.
|
||
|
||
Arguments:
|
||
|
||
servername - Points to a string containing the name of the computer
|
||
that is to execute the API function.
|
||
|
||
msgname - Points to a string containing the name that is to be deleted
|
||
from the message name table.
|
||
|
||
|
||
Return Value:
|
||
|
||
NERR_Success - The operation was successful
|
||
|
||
|
||
|
||
--*/
|
||
|
||
{
|
||
NET_API_STATUS apiStatus;
|
||
DWORD OptionsSupported = 0;
|
||
|
||
|
||
|
||
NET_REMOTE_TRY_RPC
|
||
|
||
apiStatus = NetrMessageNameDel ((LPWSTR)servername, (LPWSTR)msgname);
|
||
|
||
NET_REMOTE_RPC_FAILED("NetMessageNameDel",
|
||
(LPWSTR)servername,
|
||
apiStatus,
|
||
NET_REMOTE_FLAG_NORMAL,
|
||
SERVICE_MESSENGER)
|
||
|
||
//
|
||
// Call downlevel version of the API.
|
||
//
|
||
apiStatus = RxNetMessageNameDel((LPWSTR)servername,(LPWSTR)msgname);
|
||
|
||
NET_REMOTE_END
|
||
|
||
return(apiStatus);
|
||
}
|
||
|
||
|