Windows NT 4.0 source code leak
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

/*++
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;
}