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.
 
 
 
 
 
 

141 lines
6.1 KiB

/****************************************************************************/
// anmint.c
//
// Network Manager internal functions
//
// Copyright(C) Microsoft Corporation 1997-1998
/****************************************************************************/
#include <precomp.h>
#pragma hdrstop
#define TRC_GROUP TRC_GROUP_NETWORK
#define TRC_FILE "anmint"
#define pTRCWd (pRealNMHandle->pWDHandle)
#include <adcg.h>
#include <acomapi.h>
#include <anmint.h>
#include <asmapi.h>
#include <nwdwapi.h>
/****************************************************************************/
/* Name: NMDetachUserReq */
/* */
/* Purpose: Call MCSDetachUserReq */
/* */
/* Returns: TRUE - DetachUser issued successfully */
/* FALSE - DetachUser failed */
/* */
/* Params: pRealNMHandle - NM Handle */
/****************************************************************************/
BOOL RDPCALL NMDetachUserReq(PNM_HANDLE_DATA pRealNMHandle)
{
BOOL rc = FALSE;
MCSError MCSErr;
DetachUserIndication DUin;
DC_BEGIN_FN("NMDetachUserReq");
/************************************************************************/
/* Make the call. */
/************************************************************************/
MCSErr = MCSDetachUserRequest(pRealNMHandle->hUser);
if (MCSErr == MCS_NO_ERROR)
{
TRC_NRM((TB, "DetachUser OK"));
DUin.UserID = pRealNMHandle->userID;
DUin.bSelf = TRUE;
DUin.Reason = REASON_USER_REQUESTED;
NMDetachUserInd(pRealNMHandle,
REASON_USER_REQUESTED,
pRealNMHandle->userID);
rc = TRUE;
}
else {
TRC_ERR((TB, "Failed to send DetachUserRequest, MCSErr %d", MCSErr));
}
DC_END_FN();
return rc;
} /* NMDetachUserReq */
/****************************************************************************/
/* Name: NMAbortConnect */
/* */
/* Purpose: Abort a half-formed connection */
/* */
/* Returns: none */
/* */
/* Params: pRealNMHandle - NM Handle */
/* */
/* Operation: This function is called at any point during the connection */
/* sequence to clean up resources if anything goes wrong */
/* */
/****************************************************************************/
void RDPCALL NMAbortConnect(PNM_HANDLE_DATA pRealNMHandle)
{
DC_BEGIN_FN("NMAbortConnect");
/************************************************************************/
/* It is my belief that I don't need to leave the channels I have */
/* joined, but that I must call DetachUser if AttachUser has completed. */
/************************************************************************/
if (pRealNMHandle->connectStatus & NM_CONNECT_ATTACH)
{
TRC_NRM((TB, "User attached, need to detach"));
NMDetachUserReq(pRealNMHandle);
}
/************************************************************************/
/* Tell SM that the connection failed */
/************************************************************************/
SM_OnConnected(pRealNMHandle->pSMHandle, 0, NM_CB_CONN_ERR, NULL, 0);
DC_END_FN();
} /* NMAbortConnect */
/****************************************************************************/
/* Name: NMDetachUserInd */
/* */
/* Purpose: Handle DetachUserIndication from MCS */
/* */
/* Returns: none */
/* */
/* Params: pRealNMHandle - NM Handle */
/* pDUin - MCSDetachUserIndication Ioctl */
/****************************************************************************/
void RDPCALL NMDetachUserInd(PNM_HANDLE_DATA pRealNMHandle,
MCSReason Reason,
UserID userID)
{
UINT32 result;
DC_BEGIN_FN("NMDetachUserInd");
/************************************************************************/
/* Tell SM */
/************************************************************************/
result = Reason == REASON_USER_REQUESTED ? NM_CB_DISC_CLIENT :
Reason == REASON_DOMAIN_DISCONNECTED ? NM_CB_DISC_SERVER :
Reason == REASON_PROVIDER_INITIATED ? NM_CB_DISC_LOGOFF :
NM_CB_DISC_NETWORK;
TRC_NRM((TB, "Detach user %d, reason %d, result %d",
userID, Reason, result));
if (userID == pRealNMHandle->userID)
{
TRC_NRM((TB, "Local user detaching - tell SM"));
SM_OnDisconnected(pRealNMHandle->pSMHandle, userID, result);
}
DC_END_FN();
} /* NMDetachUserInd */