Zw создание потока

Тема в разделе "WASM.WIN32", создана пользователем Android, 6 мар 2006.

  1. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Всем привет!

    Не могу создать поток средствами ntdll. Мой код в аттаче, что я не так делаю?

    [​IMG] _736257124__CreateThread.txt
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Тут лежит pdf Неббета, в нем есть пример создания процесса и потока, может это тебе пригодится

    http://www.volynkin.ru/references.htm
     
  3. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Я по Неббету писал, не выходит, в его примере CsrClientCallServer возвращает STATUS_INVALID_HANDLE, хотя все хендлы я передаю правильно. Хочу разобраться сначала с созданием потока, потом переходить к процессу.

    В моей процедуре создания потока все апи возвращают STATUS_SUCCESS, но контрольный MessageBox не срабатывает. Почему?
     
  4. Android

    Android New Member

    Публикаций:
    0
    Регистрация:
    24 авг 2003
    Сообщения:
    183
    Адрес:
    Ukraine
    Еще наблюдается необьяснимый эффект, если перед моей процедурой запуска треда выполнить этот код (подключение к базе в котой лежат все NTSTATUSы)
    Код (Text):
    1.  
    2. NTStatusInit proc uses edi esi ebx
    3. LOCAL   buffer1[MAX_PATH]:byte
    4. LOCAL   buffer2[MAX_PATH]:byte
    5. LOCAL   hFile   :dword
    6. LOCAL   temp    :dword
    7.     invoke  GetTempPath,sizeof buffer1,addr buffer1
    8.     invoke  GetTempFileName,addr buffer1,addr szPrefix,0,addr szMdbName
    9.    
    10.     invoke  CreateMutex,0,0,addr szPrefix
    11.     mov hMutext,eax
    12.     invoke  GetLastError
    13.     .if eax!=ERROR_ALREADY_EXISTS
    14.         invoke  CreateFile,addr szMdbName,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    15.         .if eax!=-1
    16.             mov hFile,eax
    17.            
    18.             lea edi,Table
    19.             mov ebx,sizeof_Table
    20.             xor eax,eax
    21.             mov temp,eax
    22.             .repeat
    23.                 invoke  WriteFile,hFile,edi,ebx,addr temp,0
    24.                 sub ebx,temp
    25.                 add edi,temp
    26.             .until  !ebx
    27.            
    28.             invoke  CloseHandle,hFile
    29.         .endif
    30.     .endif
    31.    
    32.     invoke  ODBCConnect,0,addr szMdbName
    33.     invoke  SQLAllocHandle,SQL_HANDLE_STMT,hConn,addr hStmtNTStatus
    34.     .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    35.         invoke  SQLPrepare,hStmtNTStatus,addr szSQl_SelectNTStatus,SQL_NTS
    36.         .if ax==SQL_SUCCESS || ax==SQL_SUCCESS_WITH_INFO
    37.             invoke  SQLBindParameter,hStmtNTStatus,1,SQL_PARAM_INPUT,SQL_C_LONG, SQL_INTEGER,0,0,addr dwNTStatus,0,addr dwStrLen
    38.             invoke  SQLBindCol,hStmtNTStatus,1,SQL_C_CHAR,addr szNTStatus,sizeof szNTStatus,addr dwStrLen
    39.         .endif
    40.     .endif
    41.    
    42.     ret
    43. NTStatusInit endp
    44.  


    то поток запускается и MessageBox срабатывает, как так получается не пойму?