GetUserName

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 30 сен 2007.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Почему при вызове(в WinXP) GetUserName
    Код (Text):
    1. username              db 255 dup (?)
    2.  
    3. invoke GetUserName,addr username,sizeof username
    4. invoke MessageBox,hwnd,addr username,0, MB_OK
    выскакивает ошибка?
     
  2. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Зашибись! Какая?
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Aspire
    Инструкция по адресу такуму-то обратилась к память по адресу такому-то. Память не может быть "read".
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    под отладчиком прогони
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    vg
    так у тебя может наверное данные в нечитаемой секции...
    по твоему кусочку кода точно нескажеш
     
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.582
    Подскажите пожалуйста по похожему вопросу. Есть код, но почему-то функция возвращает пустую строку. Тестил на разных учетных записях - результат аналогичный. Система ХР. Или функция устарела, или (что более вероятно), где-то ошибка в коде.

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\kernel32.inc
    6. include \masm32\include\windows.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\Advapi32.inc
    9. includelib \masm32\lib\kernel32.lib
    10. includelib \masm32\lib\user32.lib
    11. includelib \masm32\lib\Advapi32.lib
    12.  
    13. .const
    14.  
    15.  
    16. .data
    17. lpUsername db 256 dup (0)
    18. capt db "Asm",0
    19.  
    20.  
    21. .data?
    22. nSize dd ?
    23.  
    24. .code
    25. Start:
    26. Invoke GetUserName,addr lpUsername,addr nSize
    27. Invoke MessageBox,0,addr lpUsername,addr capt,0
    28.  
    29. Invoke ExitProcess,0
    30. end Start
     
  7. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    Образец Ваш не компилил может эта:
    из мздэна

    DWORD bufCharCount = INFO_BUFFER_SIZE;

    // Get and display the name of the computer.
    bufCharCount = INFO_BUFFER_SIZE;
    if( !GetComputerName( infoBuf, &bufCharCount ) )
    printError( TEXT("GetComputerName") );
    _tprintf( TEXT("\nComputer name: %s"), infoBuf );

    // Get and display the user name.
    bufCharCount = INFO_BUFFER_SIZE;
    if( !GetUserName( infoBuf, &bufCharCount ) )
    printError( TEXT("GetUserName") );
    _tprintf( TEXT("\nUser name: %s"), infoBuf );
     
  8. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    GetUserName - возвращает юникод, а MessageBox возможно ANSII
    попробуйте использовать MessageBoxW
    + размер валидный указывайте
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.582
    artkar, а что значит в Си код bufCharCount = INFO_BUFFER_SIZE; ? В плане, как это выглядит в Асме - обычный буфер или что-то другое?

    h0t, к сожалению, не помогло.

    Что интересно, на Си все получилось. Тоже не получалось, потом убрал в MessageBox указатель на буфер, и вставил его напрямую - и заработало.

    Код (Text):
    1. #include <stdio.h>
    2. #include <windows.h>
    3.  
    4. int main()
    5.     {
    6. char buf [256];
    7. DWORD sized;
    8. sized=sizeof(buf);
    9. GetUserName(buf,&sized);
    10. MessageBox (0,buf,"cc",MB_OK);
    11.  
    12.     }
     
  10. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    Попробуй nSize dd ? заменить на nSize dd 256
     
  11. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
     
  12. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.582
    nSize dd 256 - когда указал это, все заработало. Большое спасибо за помощь. Я думал, что в данном случае, nSize это out, т.е. в него передается к-тво байт.
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Почему ADDR а не OFFSET?
     
  14. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    на самом деле одно к другому преобразуется
     
  15. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.582
    K10
    в Invoke используется ADDR, так записывать удобней и проще, чем OFFSET и call.
     
  16. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    M0rg0t
    При чем здесь CALL?
    По Вашему OFFSET не используется в invoke?