Состояние флага "D" перед вызовом API-функций в win

Тема в разделе "WASM.WIN32", создана пользователем Broken Sword, 27 сен 2005.

  1. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    Ткните носом где M$-овцы об этом явно говорят. Пол-дня прое***** пока не нашел, что перед вызовом CreateFileA (и я так подозреваю многих других API)нужно сбрасывать этот чертов D.



    Внутри CreateFileA, перед вызовом CreateFileW, идет подготовка UNICODE строки для CreateFileW, для чего вызывается ntdll.RtlInitAnsiString, в котором подсчет длины имени файла идет с помощью rep scasb без предварительного cld! Это ж надо...
     
  2. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Точно, - прикол :)
     
  3. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    на вскидку - wsprintf, HeapAlloc... короче всегда надо сбрасывать, ато потом глюков не оберешься :)

    Плохо ищешь:

    Windows Calling Conventions

    This documentation presents the syntax of most functions in C-language notation. All such functions are assumed to be declared as FAR PASCAL functions, and Windows will call these functions as such. In general, exported functions in a device driver must execute the standard Windows prolog on entry and epilog on exit.



    The following list highlights the calling conventions:



    - Set the DS register to the selector of the driver's automatic data segment.

    - Save and restore the following registers if used: SS, SP, BP, SI, DI, and DS.

    - Clear the direction flag if it has been set or modified.

    - Place 16-bit return values in the AX register; 32-bit values in the DX:AX register pair.

    - Execute a FAR return.

    Windows pushes all parameters on the stack in a left to right order (the last parameter shown in the function syntax is closest to the stack pointer). Windows also passes pointer parameters as 32-bit quantities, pushing the selector first then the offset. This allows exported functions to use the lds or les instructions to retrieve pointers from the stack.

     
  4. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Мдя, пора в фак заносить такое, регулярно пионеры натыкаются.

    ЗЫ: Лично я в свое время потратил пол деня чтобы найти почему у меня все MessageBox'ы стали с кнопками внутрь :)

    Оказалось в одном месте с дуру написал push word хххх. с тех пор знаю что винда не любит терять выравнивание стэка до 4х байт =)
     
  5. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    а мне пришлось написать масросы inv_win и inva_win взамен invoke , которые восстанавливают ebx, esi, edi и cld, потому что изменить большинство кода было не реально...
     
  6. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    cmp ax,CBN_SELCHANGE

    je ...

    cmp ax,LBN_SELCHANGE

    je ...

    Почему же не выполняется второе условие думал сегодня я пока не посматрел в windows.inc :)
     
  7. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    masquer

    это что из доки к win 3.11 ?)
     
  8. ssx

    ssx Member

    Публикаций:
    0
    Регистрация:
    19 авг 2003
    Сообщения:
    336
    в последнем MSDN про это тоже есть...
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine