reactos/sdk/lib/drivers/wdf/shared/support/fxwaitlock.cpp

75 lines
1.6 KiB
C++
Raw Normal View History

/*++
Copyright (c) Microsoft Corporation
Module Name:
FxWaitLock.cpp
Abstract:
This module implements the FxWaitLock's factory method.
Author:
Revision History:
--*/
#include "fxsupportpch.hpp"
#if defined(EVENT_TRACING)
// Tracing support
extern "C" {
#include "fxwaitlock.tmh"
}
#endif
__checkReturn
NTSTATUS
FxWaitLock::_Create(
__in PFX_DRIVER_GLOBALS FxDriverGlobals,
__in_opt PWDF_OBJECT_ATTRIBUTES Attributes,
__in_opt FxObject* ParentObject,
__in BOOLEAN AssignDriverAsDefaultParent,
__out WDFWAITLOCK* LockHandle
)
{
FxWaitLock* lock;
NTSTATUS status;
*LockHandle = NULL;
lock = new (FxDriverGlobals, Attributes) FxWaitLock(FxDriverGlobals);
if (lock == NULL) {
status = STATUS_INSUFFICIENT_RESOURCES;
DoTraceLevelMessage(FxDriverGlobals, TRACE_LEVEL_ERROR, TRACINGIO,
"Memory allocation failed: %!STATUS!", status);
return status;
}
status = lock->Initialize();
if (!NT_SUCCESS(status)) {
lock->DeleteFromFailedCreate();
DoTraceLevelMessage(FxDriverGlobals, TRACE_LEVEL_ERROR, TRACINGIO,
"faield to initialize wait lock: %!STATUS!", status);
return status;
}
status = lock->Commit(Attributes,
(WDFOBJECT*)LockHandle,
ParentObject,
AssignDriverAsDefaultParent);
if (!NT_SUCCESS(status)) {
lock->DeleteFromFailedCreate();
}
return status;
}