B.3.6 Blocking Primitives for Open and Close Procedures

Instead of calling KeWaitForMutexObject, KeWaitForMultipleObjects, and KeWaitForSingleObject, a STREAMS stack must use the following corresponding functions, each of which has a queue pointer as the first parameter:

StrmWaitForMutexObject

The function StrmWaitForMutexObject allows the calling routine to wait until the specified mutex object attains a signaled state.

NTSTATUS
StrmWaitForMutexObject(
    IN queue_t *Queue,
    IN PKMUTEX Mutex,
    IN KWAIT_REASON WaitReason,
    IN KPROCESSOR_MODE WaitMode,
    IN BOOLEAN Alertable,
    IN PLARGE_INTEGER Timeout OPTIONAL
    );
 
Parameters
Queue
Points to the queue of the calling open or close routine.
Mutex
Points to the mutex object for which to wait.
WaitReason
Specifies the reason for waiting.
WaitMode
Specifies the processor wait mode to be used.
Alertable
Specifies if the wait is alertable.
Timeout
Optionally points to the timeout period.
StrmWaitForMultipleObjects

The function StrmWaitForMultipleObjects allows the calling routine to wait until the specified objects attain a signaled state.

NTSTATUS
StrmWaitForMultipleObjects(
    IN queue_t *Queue,
    IN CCHAR Count,
    IN PVOID Object[],
    IN WAIT_TYPE WaitType,
    IN KWAIT_REASON WaitReason,
    IN KPROCESSOR_MODE WaitMode,
    IN BOOLEAN Alertable,
    IN PLARGE_INTEGER Timeout OPTIONAL,
    IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
    );
 
Parameters
Queue
Points to the queue of the calling open or close routine.
Count
Specifies the number of objects for which to wait.
Object[]
Points to an array of pointers to dispatcher objects.
WaitType
Specifies the wait type (WaitAll or WaitAny).
WaitReason
Specifies the reason for waiting.
WaitMode
Specifies the processor wait mode to be used.
Alertable
Specifies if the wait is alertable.
Timeout
Optionally points to the timeout period.
WaitBlockArray
Optionally points to an array of wait blocks.
StrmWaitForSingleObject

The function StrmWaitForSingleObject allows the calling routine to wait until the specified object attains a Signaled state.

NTSTATUS
StrmWaitForSingleObject(
    IN queue_t *Queue,
    IN PVOID Object,
    IN KWAIT_REASON WaitReason,
    IN KPROCESSOR_MODE WaitMode,
    IN BOOLEAN Alertable,
    IN PLARGE_INTEGER Timeout OPTIONAL
    );
 
Parameters
Queue
Points to the queue of the calling open or close routine.
Object
Points to the dispatcher object.
WaitReason
Specifies the reason for waiting.
WaitMode
Specifies the processor wait mode to be used.
Alertable
Specifies if the wait is alertable.
Timeout
Optionally points to the timeout period.