Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results

Home NTDEV

Before Posting...

Please check out the Community Guidelines in the Announcements and Administration Category.

More Info on Driver Writing and Debugging


The free OSR Learning Library has more than 50 articles on a wide variety of topics about writing and debugging device drivers and Minifilters. From introductory level to advanced. All the articles have been recently reviewed and updated, and are written using the clear and definitive style you've come to expect from OSR over the years.


Check out The OSR Learning Library at: https://www.osr.com/osr-learning-library/


ExAcquireResourceExclusiveLite and recurse

OSR_Community_UserOSR_Community_User Member Posts: 110,217
Can be ExAcquireResourceExclusiveLite called two (or more) times
from one thread before resource is released with
ExReleaseResourceForThreadLite?

Petr Balas (petr at petrbalas dot cz)

Comments

  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    > Can be ExAcquireResourceExclusiveLite called two (or more) times
    > from one thread before resource is released with
    > ExReleaseResourceForThreadLite?

    AFAIK yes - and you will need to release it twice too.

    Max
  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    Hi

    > > Can be ExAcquireResourceExclusiveLite called two (or more) times
    > > from one thread before resource is released with
    > > ExReleaseResourceForThreadLite?
    >
    > AFAIK yes - and you will need to release it twice too.

    O.K. it's exactly what I need.

    BTW:
    1) IOCTL call
    2) acquire mutex via KeWaitForMutexObject
    3) return from IOCTL
    4) BSOD

    Anybody know why?

    Petr

    Petr Balas (petr at petrbalas dot cz)
  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    > BTW:
    > 1) IOCTL call
    > 2) acquire mutex via KeWaitForMutexObject
    > 3) return from IOCTL
    > 4) BSOD
    >
    > Anybody know why?

    You must release mutex before returning to user mode. Use mutants if you
    do not want this behaviour.

    Max
  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    Hi

    > > BTW:
    > > 1) IOCTL call
    > > 2) acquire mutex via KeWaitForMutexObject
    > > 3) return from IOCTL
    > > 4) BSOD
    > >
    > > Anybody know why?
    >
    > You must release mutex before returning to user mode. Use mutants if you
    > do not want this behaviour.

    How to create mutant from kernel mode?
    Can mutants be acquired recursivelly?

    Petr
  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    > How to create mutant from kernel mode?

    There is an undocumented NtCreateMutant call, but it's better to use
    CreateMutex from user mode.

    > Can mutants be acquired recursivelly?

    Yes. This is what called "mutex" in user-mode Win32.

    Max
  • OSR_Community_UserOSR_Community_User Member Posts: 110,217
    Hi

    > > How to create mutant from kernel mode?
    >
    > There is an undocumented NtCreateMutant call, but it's better to use
    > CreateMutex from user mode.

    Hmmmm.

    > > Can mutants be acquired recursivelly?
    >
    > Yes. This is what called "mutex" in user-mode Win32.

    O.K.

    But at this moment I prefer to stay with resources:

    Create:
    ExInitializeResourceLite(&SerializeAccessResource);

    Delete:
    ExDeleteResourceLite(&SerializeAccessResource);

    Acquire:
    SerializeAccessOwningThread = ExGetCurrentResourceThread();
    ExAcquireResourceExclusiveLite(&SerializeAccessResource, TRUE);

    Release:
    ExReleaseResourceForThreadLite(&SerializeAccessResource,
    SerializeAccessOwningThread);

    Petr

    Petr Balas (petr at petrbalas dot cz)
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. Sign in or register to get started.

Upcoming OSR Seminars
OSR has suspended in-person seminars due to the Covid-19 outbreak. But, don't miss your training! Attend via the internet instead!
Internals & Software Drivers 7 February 2022 Live, Online
Kernel Debugging 21 March 2022 Live, Online
Developing Minifilters 23 May 2022 Live, Online
Writing WDF Drivers 12 September 2022 Live, Online