информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Google заблокировала 2 с лишним... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Read the F... MSDN when you do Windows programming!!!! sleduuchii raz shtraffff!! 05.12.01 21:49  Число просмотров: 1120
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
<programming>
Как Билли умудрился это сделать???? 05.12.01 21:03  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Господа, обнаружил интересную фишку....

Наверняка все знают такую хрень как Winpopup.exe - поставляеца с 9х виндой..

Так вот в чем фишка - когда сообщение на слот приходит, этот галимый попап СРАЗУ ЖЕ (без лагов) реагирует - т.е. показывает сообщение....
Возникает вопрос, как попап определяет что сообщение пришло.... Этот вопрос вызывает затруднения поскольку:
1. прога работает в один поток (проверял)
2. прога не юзает таймер (проверял)
3. прога не циклица на GetMailslotInfo или какйнть заумный ReadFile
4. если глянуть внутрь попапа - то там нет списка ф-ций который он юзает, видимо все импортица по ординалам....

Как же эти гады умудрились это провернуть.... Или они фишку знают? Может при получении мессаги генерица недокументированное системное сообщение или что то типа? КАК?

Как Билли умудрился это сделать???? 05.12.01 21:10  
Автор: NeuronVikingIII Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Господа, обнаружил интересную фишку....
>
> Наверняка все знают такую хрень как Winpopup.exe -
> поставляеца с 9х виндой..
>
> Так вот в чем фишка - когда сообщение на слот приходит,
> этот галимый попап СРАЗУ ЖЕ (без лагов) реагирует - т.е.
> показывает сообщение....
> Возникает вопрос, как попап определяет что сообщение
> пришло.... Этот вопрос вызывает затруднения поскольку:
> 1. прога работает в один поток (проверял)
> 2. прога не юзает таймер (проверял)
> 3. прога не циклица на GetMailslotInfo или какйнть заумный
> ReadFile
> 4. если глянуть внутрь попапа - то там нет списка ф-ций
> который он юзает, видимо все импортица по ординалам....
>
> Как же эти гады умудрились это провернуть.... Или они фишку
> знают? Может при получении мессаги генерица
> недокументированное системное сообщение или что то типа?
> КАК?
>

че ты голову себе ломаешь? это же часть МД ...
тем не менее 05.12.01 21:12  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
мастдай не мастдай но мне надо самому mailslot'овый сервак написать... посему я хотел бы знать как это эффективнее сделать.... потому что юзать таймер или новый поток с циклом - это не по-отцовски как то......

Может подскажете чонть?
тем не менее 05.12.01 21:17  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
правда есть у него внутри ASYNCREADCALLBACK... но сколько я не пытался сделть ReadFileEx асинхронной - мне выдавалась ошибка при компиляции.....
тем не менее 05.12.01 21:26  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
сорри - соврал... не при компиляции а при исполнении....
ReadFileEx(SlotHandle,Buffer,100,0,(LPOVERLAPPED_COMPLETION_ROUTINE)Finished) - возвращает ошибку "Parameter is incorrect".

тут в чем дело и как можно еще процитать слот?
a example zapodlo posmotret`?? 05.12.01 21:38  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
from MSDN
VOID IoCompletionRoutine(DWORD dwErrorCode, 
        DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) 
{ 
    // If an I/O error occurs, display the error and exit. 
 
    if (dwErrorCode) 
    { 
        printf("FATAL I/O Error %ld I/O Context %lx.%lx\n", 
            dwErrorCode, lpOverlapped, lpOverlapped->hEvent); 
        ExitProcess(dwErrorCode); 
    } 
    LocalFree(lpOverlapped); 
} 
Main Thread: 

VOID IoWorkerThread(VOID) 
{ 
    HANDLE HandleVector[2]; 
    DWORD CompletionStatus; 
    PIOREQUEST IoRequestPacket; 
    LPOVERLAPPED Overlapped; 
    BOOL IoOperationStatus; 
 
    HandleVector[0] = IoWorkerListLock; 
    HandleVector[1] = IoWorkerListSemaphore; 
 
    for(;;) 
    { 
 
        // Do an alertable wait on the handle vector. Both objects 
        // being signaled at the same time means that there is an 
        // I/O request in the queue and the caller has exclusive 
        // access to the queue. 
 
        CompletionStatus = WaitForMultipleObjectsEx(2, HandleVector, 
                TRUE, INFINITE, TRUE); 
 
        // If the wait failed, error out. 
 
        if (CompletionStatus == -1) 
        { 
            printf("FATAL WAIT ERROR %ld\n", GetLastError()); 
            ExitProcess(1); 
        } 
        // If an I/O completion occurred, wait for another 
        // I/O request or I/O completion. 
 
        if (CompletionStatus != WAIT_IO_COMPLETION) 
        { 
 
            // The wait was satisfied. Ownership of the I/O 
            // request queue is exclusive, and there is something in 
            // the queue. To insert something in the queue, the 
            // inserter gets the list lock (mutex), inserts an entry, 
            // signals the list semaphore, and finally releases the 
            // list lock. 
 
            IoRequestPacket = RemoveHeadList(&IoRequestList); 
 
            ReleaseMutex(IoWorkerListLock); 
 
            // Allocate an overlapped structure.
 
            Overlapped = LocalAlloc(LMEM_ZEROINIT, 
                    sizeof(OVERLAPPED)); 
 
            if (!Overlapped) 
            { 
                printf("FATAL allocation error\n"); 
                ExitProcess(1); 
            } 
 
            Overlapped->Offset = IoRequestPacket->Offset; 
            Overlapped->OffsetHigh = IoRequestPacket->OffsetHigh; 
            Overlapped->hEvent = 
                    IoRequestPacket->dwAdditionalIoContext; 
 
            if (IoRequestPacket->bRead) 
            { 
                IoOperationStatus = 
                            ReadFileEx(IoRequestPacket->hFile, 
                    IoRequestPacket->lpBuffer, 
                    IoRequestPacket->dwTransferCount, 
                    Overlapped, IoCompletionRoutine); 
            } 
            else 
            { 
                IoOperationStatus = 
                    WriteFileEx(IoRequestPacket->hFile, 
                        IoRequestPacket->lpBuffer, 
                        IoRequestPacket->dwTransferCount, 
                        Overlapped, 
                        IoCompletionRoutine); 
            } 
 
            // Test to see if the I/O was queued successfully.
 
            if (!IoOperationStatus) 
            { 
                printf("FATAL I/O Error %ld I/O Context %lx.%lx\n", 
                    GetLastError(), Overlapped, Overlapped->hEvent); 
                ExitProcess(1); 
            } 
 
            // The I/O queued successfully. Go back into the 
            // alertable wait for I/O completion or for 
            // more I/O requests. 
 
        } 
    } 
} 

---
a example zapodlo posmotret`?? 05.12.01 21:47  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
к тому же ты советуешь создавать новый поток а это нежелательно.. winpopup реализован в рамках 1 потока.... мне такая же фишка нужна
a example zapodlo posmotret`?? 05.12.01 23:00  
Автор: :-) <:-)> Статус: Elderman
Отредактировано 05.12.01 23:30  Количество правок: 1
<"чистая" ссылка>
> к тому же ты советуешь создавать новый поток а это
> нежелательно.. winpopup реализован в рамках 1 потока....
> мне такая же фишка нужна

winpopup - 16-битовая программа
Так там что многопоточность невозможна в принципе :-))
В ф-ию DOSREADASYNCNMPIPE в качестве параметра передается адрес ф-ии ASYNCREADCALLBACK

Если интересно, вот список всех ф-й, импортируемых winpopup.exe:

; Segment type: Externs
; USER
extrn MESSAGEBOX:far
extrn INITAPP:far
extrn POSTQUITMESSAGE:far
extrn SETFOCUS:far
extrn ISICONIC:far
extrn ENABLEWINDOW:far
extrn SETWINDOWTEXT:far
extrn GETWINDOWTEXTLENGTH:far
extrn SHOWWINDOW:far
extrn FINDWINDOW:far
extrn DESTROYWINDOW:far
extrn REGISTERCLASS:far
extrn GETDC:far
extrn RELEASEDC:far
extrn SETCURSOR:far
extrn DIALOGBOX:far
extrn ENDDIALOG:far
extrn CREATEDIALOG:far
extrn ISDIALOGMESSAGE:far
extrn GETDLGITEM:far
extrn SETDLGITEMTEXT:far
extrn GETDLGITEMTEXT:far
extrn SENDDLGITEMMESSAGE:far
extrn MESSAGEBEEP:far
extrn GETMESSAGE:far
extrn POSTMESSAGE:far
extrn SENDMESSAGE:far
extrn TRANSLATEMESSAGE:far
extrn DISPATCHMESSAGE:far
extrn SETCLASSWORD:far
extrn ENABLEMENUITEM:far
extrn GETMENU:far
extrn WINHELP:far
extrn LOADCURSOR:far
extrn LOADICON:far
extrn LOADSTRING:far
extrn LOADACCELERATORS:far
extrn TRANSLATEACCELERATOR:far
extrn SETWINDOWPOS:far
extrn GETLASTACTIVEPOPUP:far
extrn REDRAWWINDOW:far
extrn DEFDLGPROC:near
extrn _WSPRINTF:far
extrn LSTRCMP:far
extrn ANSIUPPER:far
extrn LSTRCMPI:far
extrn ANSINEXT:far
extrn SETFOREGROUNDWINDOW:far
extrn USER_WNETGETCAPS:far

; ===========================================================================

; Segment type: Externs
; SHELL
extrn SHELL_SHELLABOUT:far

; ===========================================================================

; Segment type: Externs
; KERNEL
extrn FATALEXIT:far
extrn GETVERSION:far
extrn LOCALALLOC:far
extrn LOCALREALLOC:far
extrn LOCALFREE:far
extrn LOCALSIZE:far
extrn GLOBALALLOC:far
extrn GLOBALREALLOC:far
extrn GLOBALFREE:far
extrn GLOBALLOCK:far
extrn GLOBALSIZE:far
extrn GLOBALHANDLE:far
extrn LOCKSEGMENT:far
extrn UNLOCKSEGMENT:far
extrn WAITEVENT:far
extrn GETMODULEFILENAME:far
extrn MAKEPROCINSTANCE:far
extrn GETPROFILEINT:far
extrn GETPROFILESTRING:far
extrn LSTRCPY:far
extrn LSTRCAT:far
extrn LSTRLEN:far
extrn INITTASK:far
extrn DOS3CALL:far
extrn GETDOSENVIRONMENT:far
extrn FATALAPPEXIT:far
extrn __WINFLAGS:near
extrn ISDBCSLEADBYTE:far
extrn KERNEL_217:far
extrn KERNEL_218:far
extrn KERNEL_220:far
extrn REGQUERYVALUEEX:far
extrn REGSETVALUEEX:far

; ===========================================================================

; Segment type: Externs
; GDI
extrn GETDEVICECAPS:far

; ===========================================================================

; Segment type: Externs
; KEYBOARD
extrn ANSITOOEM:far
extrn OEMTOANSI:far

; ===========================================================================

; Segment type: Externs
; COMMCTRL
extrn MENUHELP:far
extrn CREATESTATUSWINDOW:far
extrn CREATETOOLBAREX:far

; ===========================================================================

; Segment type: Externs
; NETAPI
extrn NETWKSTAGETINFO:far
extrn DOSDELETEMAILSLOT:far
extrn DOSMAKEMAILSLOT:far
extrn NETMESSAGEBUFFERSEND:far
extrn DOSREADASYNCNMPIPE:far

; ===========================================================================

; Segment type: Externs
; MMSYSTEM
extrn SNDPLAYSOUND:far
extrn WAVEOUTGETNUMDEVS:far
a example zapodlo posmotret`?? 06.12.01 00:46  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Фак! А слона то и не заметил.. ))) про сущ-е 16 биток забыл совсем ))).... Простите дуру грешную... )) тогда дело ясно.....
I ni chego ne sovetuu, I scopiroval example is MSDN, a ty kak hochesh tak kruti ego! Vot chelovek upertyii pi..dec kakoito!! 05.12.01 21:52  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
no fucking example - BCC 05.12.01 21:45  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
спасибо.... но у мя BCC - там на readfileex нету сампла...
Read the F... MSDN when you do Windows programming!!!! sleduuchii raz shtraffff!! 05.12.01 21:49  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach