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.
 
 
 
 
 
 

191 lines
3.9 KiB

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
Handles.cxx
OLDNAME: NTIF.CXX: Windows/NT Network Control Panel Applet
FILE HISTORY:
*/
#include "pch.hxx" // Precompiled header
#pragma hdrstop
NT_HANDLE :: NT_HANDLE ()
: _hndl( NULL ),
_status( STATUS_SUCCESS )
{
}
NT_HANDLE :: ~ NT_HANDLE ()
{
Close() ;
}
BOOL NT_HANDLE :: Close ()
{
_status = _hndl
? ::CloseHandle( _hndl )
: STATUS_SUCCESS ;
_hndl = NULL ;
return NT_SUCCESS( _status ) ;
}
BOOL NT_HANDLE :: OpenOrCreate (
const WCHAR * pwchName,
ACCESS_MASK accessDesired,
ULONG ulAttributes,
BOOL bCreate )
{
OBJECT_ATTRIBUTES objAttr ;
UNICODE_STRING unsName ;
::RtlInitUnicodeString( & unsName, pwchName ) ;
InitializeObjectAttributes( & objAttr,
& unsName,
ulAttributes,
0,
NULL ) ;
_status = wOpen( accessDesired, & objAttr, bCreate ) ;
return NT_SUCCESS( _status ) ;
}
BOOL NT_HANDLE :: Open (
const WCHAR * pwchName,
ACCESS_MASK accessDesired,
ULONG ulAttributes )
{
return OpenOrCreate( pwchName,
accessDesired,
ulAttributes,
FALSE ) ;
}
BOOL NT_HANDLE :: Create (
const WCHAR * pwchName,
ACCESS_MASK accessDesired,
ULONG ulAttributes )
{
return OpenOrCreate( pwchName,
accessDesired,
ulAttributes,
TRUE ) ;
}
APIERR NT_HANDLE :: QueryApiError ()
{
return ::RtlNtStatusToDosError( _status ) ;
}
BOOL NT_HANDLE :: Wait (
ULONG cTimeout,
BOOL bAlertable )
{
TIME liTime = ::RtlConvertLongToLargeInteger( cTimeout ) ;
_status = ::NtWaitForSingleObject( _hndl, bAlertable, & liTime ) ;
return NT_SUCCESS( _status ) ;
}
NT_EVENT :: NT_EVENT ( EVENT_TYPE evType )
: _evType( evType )
{
}
NT_EVENT :: ~ NT_EVENT ()
{
}
NTSTATUS NT_EVENT :: wOpen (
ACCESS_MASK accessDesired,
OBJECT_ATTRIBUTES * pObjAttr,
BOOL bCreate )
{
NTSTATUS ntStatus ;
if ( bCreate )
{
ntStatus = ::NtCreateEvent( & _hndl,
accessDesired,
pObjAttr,
_evType,
FALSE ) ;
}
else
{
ntStatus = ::NtOpenEvent( & _hndl,
accessDesired,
pObjAttr ) ;
}
if ( ! NT_SUCCESS( ntStatus ) )
{
_hndl = NULL ; // Just for safety
}
return ntStatus ;
}
BOOL NT_EVENT :: Signal ( LONG * plPreviousState )
{
_status = ::NtSetEvent( _hndl, plPreviousState ) ;
return NT_SUCCESS( _status ) ;
}
BOOL NT_EVENT :: Reset ( LONG * plPreviousState )
{
_status = ::NtResetEvent( _hndl, plPreviousState ) ;
return NT_SUCCESS( _status ) ;
}
BOOL NT_EVENT :: Pulse ( LONG * plPreviousState )
{
_status = ::NtPulseEvent( _hndl, plPreviousState ) ;
return NT_SUCCESS( _status ) ;
}
BOOL NT_EVENT :: QueryState (
LONG * plEventState,
EVENT_TYPE * pEvType )
{
EVENT_BASIC_INFORMATION evInfo ;
BOOL bResult ;
_status = ::NtQueryEvent( _hndl,
EventBasicInformation,
& evInfo,
sizeof evInfo,
NULL ) ;
if ( bResult = NT_SUCCESS( _status ) )
{
*plEventState = evInfo.EventState ;
if ( pEvType )
*pEvType = evInfo.EventType ;
}
return bResult ;
}
// End of NTIF.CXX