windows-nt/Source/XPSP1/NT/ds/adsi/drt/adscmd/session.cxx
2020-09-26 16:20:57 +08:00

152 lines
3 KiB
C++

//----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996
//
// File: session.cxx
//
// Contents: Active Directory Session manipulation
//
// History: 05-07-96 RamV Created
// 08-05-96 t-danal Add to oledscmd
//
//----------------------------------------------------------------------------
#include "main.hxx"
#include "macro.hxx"
#include "sconv.hxx"
//
// Dispatch Table Defs
//
#include "dispdef.hxx"
DEFEXEC(ExecSessionDel);
DEFDISPTABLE(DispTable) = {
{"del", NULL, ExecSessionDel}
};
DEFDISPSIZE(nDispTable, DispTable);
//
// Local functions
//
HRESULT
DeleteSession(
LPWSTR szParentContainer,
LPWSTR szSessionName
);
//
// Local function definitions
//
HRESULT
DeleteSession(
LPWSTR szParentContainer,
LPWSTR szSessionName
)
{
HRESULT hr;
IADsFileServiceOperations * pADsParent = NULL;
IUnknown * pUnknown = NULL;
IADs * pADs = NULL;
IADsCollection *pCollection = NULL;
hr = ADsGetObject(
szParentContainer,
IID_IADsFileServiceOperations,
(void **)&pADsParent
);
BAIL_ON_FAILURE(hr);
hr = pADsParent->Sessions(&pCollection);
BAIL_ON_FAILURE(hr);
hr = pCollection->Remove(szSessionName);
BAIL_ON_FAILURE(hr);
error:
if (pADsParent) {
pADsParent->Release();
}
if (pCollection) {
pCollection->Release();
}
return(hr);
}
//
// Exec function definitions
//
int
ExecSession(char *szProgName, char *szAction, int argc, char * argv[])
{
if (!argc) {
PrintUsage(szProgName, szAction, DispTable, nDispTable);
return(1);
}
char *szPrevActions = szAction;
szAction = argv[0];
argc--;
argv++;
if (DoHelp(szProgName,
szPrevActions, szAction, NULL,
DispTable, nDispTable,
NULL))
return 0;
return DispatchExec(DispTable, nDispTable,
szProgName,
szPrevActions, szAction,
argc, argv);
}
int
ExecSessionDel(
char *szProgName,
char *szAction,
int argc,
char * argv[]
)
{
HRESULT hr;
LPWSTR szParentContainer = NULL;
LPWSTR szSessionName = NULL;
if (argc != 2) {
PrintUsage(szProgName,
szAction,
"<Container> <SessionName>");
return(1);
}
szParentContainer = AllocateUnicodeString(
argv[0]
);
szSessionName = AllocateUnicodeString(
argv[1]
);
hr = DeleteSession(
szParentContainer,
szSessionName
);
FreeUnicodeString(szSessionName);
FreeUnicodeString(szParentContainer);
if (FAILED(hr)) {
printf("DeleteSession failed with error code %x\n", hr);
return(1);
}
return(0);
}