в EnterCriticalSection нет ни адреса ни размера критической секции!

Тема в разделе "WASM.BEGINNERS", создана пользователем amvoz, 31 дек 2011.

  1. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Почему?
    Я щас ковыряюсь в одной программе и наткнулася на вызов API-функции EnterCriticalSection, почитал про неё и не понял, а где же самое главное- адрес и размер критической секции, которую, она, собсно и должна "захватить"?

    Вот структура, указатель на которую она принимает, она у меня так объявлена в Winbase.h

    Код (Text):
    1. typedef struct _CRITICAL_SECTION {
    2.     PCRITICAL_SECTION_DEBUG DebugInfo;
    3.     LONG LockCount;
    4.     LONG RecursionCount;
    5.     HANDLE OwningThread;
    6.     HANDLE LockSemaphore;
    7.     DWORD SpinCount;
    8. } CRITICAL_SECTION,*PCRITICAL_SECTION,*LPCRITICAL_SECTION;
    , тут нет ти указателя на секцию, ни её размера. Спасибо, кто откликнется!
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    На васме все так новый год встречают? :)
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    amvoz
    Критическая секция — двусмысленное понятие. Как структура данных (приведенная Вами) она имеет и указатель, и размер. Если под критической секцией понимается область кода, в которую нельзя заходить дважды, то для неё понятия указателя и размера бессмысленны, т.к. точек захвата/освобождения соответствующей критической секции, как структуры данных, может быть множество, причём в несвязанных кусках кода.
     
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Ну, хорошо. Вот у меня после вызова EnterCriticalSection будет адрес cafebabe- как я определю, принадлежит он критической секции или нет?
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    amvoz
    Определённый адрес одного и того же кода может принадлежать критической секции в один момент времени, и не принадлежать в другой. Для реализации критических секций структуре критической секции адрес последнего её захвата абсолютно не нужен.
     
  6. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    amvoz
    Это ссылка на обьект. Вам и не нужно знать принадлежит она кс или нет. Вы должны использовать только свою кс, адрес которой всегда известен. Если вам необходимо проверить произвольную ссылку на принадлежность кс, то такая возможность есть. Нэйтив ведёт список секций. Получаем слепок через RtlQueryProcessLockInformation() или RtlQueryProcessDebugInformation(PDI_LOCKS) и находим там свой адрес.