[Bug 44837] BattlEye 'BEDaisy' kernel service fails in driver entry point due to missing ' ntoskrnl.exe.Ps{Acquire,Release}ProcessExitSynchronization'

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Mar 27 17:59:16 CDT 2018


https://bugs.winehq.org/show_bug.cgi?id=44837

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|BattlEye 'BEDaisy' kernel   |BattlEye 'BEDaisy' kernel
                   |service fails in driver     |service fails in driver
                   |entry point due to missing  |entry point due to missing
                   |'ntoskrnl.exe.PsAcquireProc |'ntoskrnl.exe.Ps{Acquire,Re
                   |essExitSynchronization'     |lease}ProcessExitSynchroniz
                   |                            |ation'

--- Comment #1 from Anastasius Focht <focht at gmx.net> ---
Hello again,

actually stubs for both should be added, to avoid another ticket.

* VOID PsAcquireProcessExitSynchronization(PEPROCESS Process)
* ULONG PsReleaseProcessExitSynchronization(PEPROCESS Process)

A code example how this API is supposed to be used:

https://github.com/processhacker/processhacker/blob/master/KProcessHacker/object.c

--- snip ---
...

/**
 * Gets a pointer to the handle table of a process.
 *
 * \param Process A process object.
 *
 * \return A pointer to the handle table, or NULL if the process is terminating
or the request is
 * not supported. You must call KphDereferenceProcessHandleTable() when the
handle table is no
 * longer needed.
 */
PHANDLE_TABLE KphReferenceProcessHandleTable(
    _In_ PEPROCESS Process
    )
{
    PHANDLE_TABLE handleTable = NULL;

    PAGED_CODE();

    // Fail if we don't have an offset.
    if (KphDynEpObjectTable == -1)
        return NULL;

    // Prevent the process from terminating and get its handle table.
    if (NT_SUCCESS(PsAcquireProcessExitSynchronization(Process)))
    {
        handleTable = *(PHANDLE_TABLE *)PTR_ADD_OFFSET(Process,
KphDynEpObjectTable);

        if (!handleTable)
            PsReleaseProcessExitSynchronization(Process);
    }

    return handleTable;
}

/**
 * Dereferences the handle table of a process.
 *
 * \param Process A process object.
 */
VOID KphDereferenceProcessHandleTable(
    _In_ PEPROCESS Process
    )
{
    PAGED_CODE();

    PsReleaseProcessExitSynchronization(Process);
}

...
--- snip ---

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list