mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
5.0 KiB
285 lines
5.0 KiB
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
mibserv.c
|
|
|
|
Abstract:
|
|
|
|
The MIB services handling functions
|
|
|
|
Author:
|
|
|
|
Stefan Solomon 03/22/1995
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
/*++
|
|
|
|
Function: MibGetService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
if(IsService(mip->ServicesTableIndex.ServiceType,
|
|
mip->ServicesTableIndex.ServiceName,
|
|
Svp)) {
|
|
|
|
return NO_ERROR;
|
|
}
|
|
else
|
|
{
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibGetFirstService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetFirstService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
return(GetFirstService(STM_ORDER_BY_TYPE_AND_NAME, 0, Svp));
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibGetNextService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetNextService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
Svp->Server.Type = mip->ServicesTableIndex.ServiceType;
|
|
memcpy(Svp->Server.Name, mip->ServicesTableIndex.ServiceName, 48);
|
|
|
|
return(GetNextService(STM_ORDER_BY_TYPE_AND_NAME, 0, Svp));
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibCreateStaticService
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibCreateStaticService(PIPX_MIB_ROW MibRowp)
|
|
{
|
|
PIPX_SERVICE StaticSvp;
|
|
DWORD rc;
|
|
PICB icbp;
|
|
|
|
StaticSvp = &MibRowp->Service;
|
|
|
|
ACQUIRE_DATABASE_LOCK;
|
|
|
|
// check the interface exists
|
|
if((icbp=GetInterfaceByIndex(StaticSvp->InterfaceIndex)) == NULL) {
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
rc = CreateStaticService(icbp,
|
|
&StaticSvp->Server);
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return rc;
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: DeleteStaticService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibDeleteStaticService(PIPX_MIB_ROW MibRowp)
|
|
{
|
|
PIPX_SERVICE StaticSvp;
|
|
DWORD rc;
|
|
|
|
StaticSvp = &MibRowp->Service;
|
|
|
|
ACQUIRE_DATABASE_LOCK;
|
|
|
|
// check the interface exists
|
|
if(GetInterfaceByIndex(StaticSvp->InterfaceIndex) == NULL) {
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
rc = DeleteStaticService(StaticSvp->InterfaceIndex,
|
|
&StaticSvp->Server);
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return rc;
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibGetStaticService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetStaticService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
Svp->InterfaceIndex = mip->StaticServicesTableIndex.InterfaceIndex;
|
|
Svp->Server.Type = mip->StaticServicesTableIndex.ServiceType;
|
|
memcpy(Svp->Server.Name, mip->StaticServicesTableIndex.ServiceName, 48);
|
|
Svp->Protocol = IPX_PROTOCOL_STATIC;
|
|
|
|
return(GetFirstService(STM_ORDER_BY_INTERFACE_TYPE_NAME,
|
|
STM_ONLY_THIS_INTERFACE | STM_ONLY_THIS_TYPE | STM_ONLY_THIS_NAME | STM_ONLY_THIS_PROTOCOL,
|
|
Svp));
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibGetFirstStaticService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetFirstStaticService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
// set the static protocol
|
|
Svp->Protocol = IPX_PROTOCOL_STATIC;
|
|
|
|
return(GetFirstService(STM_ORDER_BY_INTERFACE_TYPE_NAME,
|
|
STM_ONLY_THIS_PROTOCOL,
|
|
Svp));
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibGetNextStaticService
|
|
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibGetNextStaticService(PIPX_MIB_INDEX mip,
|
|
PIPX_SERVICE Svp,
|
|
PULONG ServiceSize)
|
|
{
|
|
if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
|
|
|
|
*ServiceSize = sizeof(IPX_SERVICE);
|
|
return ERROR_INSUFFICIENT_BUFFER;
|
|
}
|
|
|
|
Svp->InterfaceIndex = mip->StaticServicesTableIndex.InterfaceIndex;
|
|
Svp->Server.Type = mip->StaticServicesTableIndex.ServiceType;
|
|
memcpy(Svp->Server.Name, mip->StaticServicesTableIndex.ServiceName, 48);
|
|
Svp->Protocol = IPX_PROTOCOL_STATIC;
|
|
|
|
return(GetNextService(STM_ORDER_BY_INTERFACE_TYPE_NAME,
|
|
STM_ONLY_THIS_PROTOCOL,
|
|
Svp));
|
|
}
|
|
|
|
/*++
|
|
|
|
Function: MibSetStaticService
|
|
Descr:
|
|
|
|
--*/
|
|
|
|
DWORD
|
|
MibSetStaticService(PIPX_MIB_ROW MibRowp)
|
|
{
|
|
PIPX_SERVICE StaticSvp;
|
|
DWORD rc;
|
|
PICB icbp;
|
|
|
|
StaticSvp = &MibRowp->Service;
|
|
|
|
ACQUIRE_DATABASE_LOCK;
|
|
|
|
// check the interface exists
|
|
if((icbp=GetInterfaceByIndex(StaticSvp->InterfaceIndex)) == NULL) {
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
DeleteStaticService(StaticSvp->InterfaceIndex,
|
|
&StaticSvp->Server);
|
|
|
|
rc = CreateStaticService(icbp,
|
|
&StaticSvp->Server);
|
|
|
|
RELEASE_DATABASE_LOCK;
|
|
return rc;
|
|
}
|