Geoff Chappell - Software Analyst
SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED
The OB_OPEN_METHOD type is a pointer to a routine that can be defined for all objects of the same type. It is specified as the OpenProcedure member of the OBJECT_TYPE_INITIALIZER structure when creating the object type. It is then retained in this structure as nested into the OBJECT_TYPE structure.
The modern declaration dates from version 6.0:
typedef NTSTATUS (*OB_OPEN_METHOD) ( OB_OPEN_REASON OpenReason, KPROCESSOR_MODE AccessMode, EPROCESS *Process, PVOID Object, ACCESS_MASK *GrantedAccess, ULONG HandleCount);
In versions 5.1 to 5.2, the function has one fewer argument:
typedef NTSTATUS (*OB_OPEN_METHOD) ( OB_OPEN_REASON OpenReason, EPROCESS *Process, PVOID Object, ACCESS_MASK GrantedAccess, ULONG HandleCount);
In earlier versions, the first argument is not yet defined formally as an enumeration:
typedef VOID (*OB_OPEN_METHOD) ( INT OpenReason, EPROCESS *Process, PVOID Object, ACCESS_MASK GrantedAccess, ULONG HandleCount);