mirror of https://github.com/lianthony/NT4.0
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.
279 lines
6.2 KiB
279 lines
6.2 KiB
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
zipint.c
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
Nikhil Kamkolkar (NikhilK) 28-Jun-1992
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "atalknt.h"
|
|
|
|
|
|
|
|
NTSTATUS
|
|
AtalkTdiActionZip(
|
|
IN PATALK_TDI_REQUEST Request
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS status;
|
|
PORTABLE_ERROR errorCode;
|
|
|
|
switch (Request->ActionCode) {
|
|
case COMMON_ACTION_ZIPGETMYZONE:
|
|
|
|
{
|
|
//
|
|
// BUGBUG: Portable code must take a size parameter for
|
|
// this routine
|
|
//
|
|
|
|
errorCode = GetMyZone(
|
|
DEFAULT_PORT,
|
|
(PVOID)Request->MdlChain[0],
|
|
Request->CompletionRoutine,
|
|
(ULONG)Request);
|
|
|
|
status = ConvertToNTStatus(errorCode, ASYNC_REQUEST);
|
|
}
|
|
break;
|
|
|
|
case COMMON_ACTION_ZIPGETZONELIST:
|
|
|
|
{
|
|
errorCode = GetZoneList(
|
|
DEFAULT_PORT,
|
|
FALSE, // Get Local zones
|
|
(PVOID)Request->MdlChain[0],
|
|
Request->MdlSize[0],
|
|
Request->CompletionRoutine,
|
|
(ULONG)Request);
|
|
|
|
status = ConvertToNTStatus(errorCode, ASYNC_REQUEST);
|
|
}
|
|
break;
|
|
|
|
case COMMON_ACTION_ZIPGETLZONES:
|
|
|
|
{
|
|
errorCode = GetZoneList(
|
|
DEFAULT_PORT,
|
|
TRUE, // Get Local zones
|
|
(PVOID)Request->MdlChain[0],
|
|
Request->MdlSize[0],
|
|
Request->CompletionRoutine,
|
|
(ULONG)Request);
|
|
|
|
status = ConvertToNTStatus(errorCode, ASYNC_REQUEST);
|
|
}
|
|
break;
|
|
|
|
case COMMON_ACTION_ZIPGETLZONESONADAPTER:
|
|
|
|
{
|
|
INT port;
|
|
PWSTR adapterString;
|
|
UNICODE_STRING adapterName;
|
|
PZIP_GETZONELIST_ACTION zipGetZones;
|
|
|
|
//
|
|
// Just figure out the port number and then call the port-number
|
|
// based GetLocalZones routine
|
|
//
|
|
|
|
DBGPRINT(ATALK_DEBUG_ACTION, DEBUG_LEVEL_INFOCLASS0,
|
|
("INFO0: ZipAction - GetZonesOnAdapter called\n"));
|
|
|
|
//
|
|
// Verify adapter is specified
|
|
//
|
|
|
|
status = STATUS_INVALID_PARAMETER;
|
|
if ((Request->MdlChain[0] != NULL) && (Request->MdlSize[0] > 0)) {
|
|
|
|
zipGetZones = (PZIP_GETZONELIST_ACTION)MmGetSystemAddressForMdl(Request->Action.MdlAddress);
|
|
adapterString = (PWCHAR)(zipGetZones+1);
|
|
|
|
//
|
|
// Search all our NdisPortDescriptors for this adapter name, if found use
|
|
// the port number to get the zone list on that port
|
|
//
|
|
|
|
RtlInitUnicodeString(&adapterName, adapterString);
|
|
for (port = 0; port < NumberOfPorts; port++) {
|
|
|
|
if (RtlEqualUnicodeString(&NdisPortDesc[port].AdapterName, &adapterName, TRUE)) {
|
|
DBGPRINT(ATALK_DEBUG_ACTION, DEBUG_LEVEL_INFOCLASS1,
|
|
("INFO1: ZipAction (GETLZONESONADAPTER) Matched! Port #%d\n",NdisPortDesc[port].PortNumber));
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (port < NumberOfPorts) {
|
|
|
|
//
|
|
// Found the port number for the specified adapter
|
|
//
|
|
|
|
errorCode = GetZoneList(
|
|
port,
|
|
TRUE, // Get Local zones
|
|
(PVOID)Request->MdlChain[0],
|
|
Request->MdlSize[0],
|
|
Request->CompletionRoutine,
|
|
(ULONG)Request);
|
|
|
|
status = ConvertToNTStatus(errorCode, ASYNC_REQUEST);
|
|
|
|
} else {
|
|
status = STATUS_OBJECT_NAME_NOT_FOUND;
|
|
}
|
|
}
|
|
|
|
if (status != STATUS_PENDING) {
|
|
DBGPRINT(ATALK_DEBUG_ACTION, DEBUG_LEVEL_ERROR,
|
|
("ERROR: AtalkTdiActionZip (GETZONESONADAPTER) - status %lx\n", status));
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
KeBugCheck(0);
|
|
break;
|
|
}
|
|
|
|
return(status);
|
|
}
|
|
|
|
|
|
|
|
|
|
VOID
|
|
NTZipGetMyZoneComplete(
|
|
PORTABLE_ERROR ErrorCode,
|
|
ULONG UserData,
|
|
PVOID OpaqueBuffer
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS status;
|
|
PATALK_TDI_REQUEST request;
|
|
|
|
DBGPRINT(ATALK_DEBUG_ACTION, DEBUG_LEVEL_INFOCLASS1,
|
|
("INFO1: CommonActionZipGetMyZoneComplete - error %lx\n", ErrorCode));
|
|
|
|
request = (PATALK_TDI_REQUEST)UserData;
|
|
status = ConvertToNTStatus(ErrorCode, SYNC_REQUEST);
|
|
|
|
//
|
|
// Call the generic completion to dequeue and complete the request
|
|
//
|
|
|
|
AtalkTdiActionComplete(
|
|
request,
|
|
status);
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
|
|
VOID
|
|
NTZipGetZonesComplete(
|
|
PORTABLE_ERROR ErrorCode,
|
|
ULONG UserData,
|
|
PVOID OpaqueBuffer,
|
|
INT ZoneCount
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS status;
|
|
PATALK_TDI_REQUEST request;
|
|
|
|
//
|
|
// BUGBUG: Store zone count, number of bytes written...
|
|
//
|
|
|
|
DBGPRINT(ATALK_DEBUG_ACTION, DEBUG_LEVEL_INFOCLASS0, ("AtalkCompleteZipGetZones complete %lx\n", ErrorCode));
|
|
|
|
request = (PATALK_TDI_REQUEST)UserData;
|
|
status = ConvertToNTStatus(ErrorCode, SYNC_REQUEST);
|
|
|
|
if (status == STATUS_SUCCESS) {
|
|
|
|
PZIP_GETZONELIST_ACTION getZoneList;
|
|
|
|
// Set the number of zones received in the passed in action buffer
|
|
getZoneList =
|
|
(PZIP_GETZONELIST_ACTION)MmGetSystemAddressForMdl(request->Action.MdlAddress);
|
|
|
|
getZoneList->Params.ZonesAvailable = ZoneCount;
|
|
}
|
|
|
|
//
|
|
// Call the generic completion to dequeue and complete the request
|
|
//
|
|
|
|
AtalkTdiActionComplete(
|
|
request,
|
|
status);
|
|
|
|
return;
|
|
}
|