Leaked source code of windows server 2003
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.3 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;
}