GetUserName

Discussion in 'WASM.BEGINNERS' started by vg, Sep 30, 2007.

  1. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Почему при вызове(в WinXP) GetUserName
    Code (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

    Blog Posts:
    0
    Joined:
    May 19, 2007
    Messages:
    1,028
    Зашибись! Какая?
     
  3. vg

    vg New Member

    Blog Posts:
    0
    Joined:
    Apr 16, 2007
    Messages:
    475
    Aspire
    Инструкция по адресу такуму-то обратилась к память по адресу такому-то. Память не может быть "read".
     
  4. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    под отладчиком прогони
     
  5. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    vg
    так у тебя может наверное данные в нечитаемой секции...
    по твоему кусочку кода точно нескажеш
     
  6. M0rg0t

    M0rg0t Well-Known Member

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

    Code (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

    Blog Posts:
    0
    Joined:
    Aug 17, 2005
    Messages:
    400
    Location:
    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

    Blog Posts:
    0
    Joined:
    Apr 3, 2011
    Messages:
    735
    GetUserName - возвращает юникод, а MessageBox возможно ANSII
    попробуйте использовать MessageBoxW
    + размер валидный указывайте
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    artkar, а что значит в Си код bufCharCount = INFO_BUFFER_SIZE; ? В плане, как это выглядит в Асме - обычный буфер или что-то другое?

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

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

    Code (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

    Blog Posts:
    0
    Joined:
    Aug 17, 2005
    Messages:
    400
    Location:
    Russia
    Попробуй nSize dd ? заменить на nSize dd 256
     
  11. h0t

    h0t Member

    Blog Posts:
    0
    Joined:
    Apr 3, 2011
    Messages:
    735
     
  12. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    nSize dd 256 - когда указал это, все заработало. Большое спасибо за помощь. Я думал, что в данном случае, nSize это out, т.е. в него передается к-тво байт.
     
  13. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    Почему ADDR а не OFFSET?
     
  14. h0t

    h0t Member

    Blog Posts:
    0
    Joined:
    Apr 3, 2011
    Messages:
    735
    на самом деле одно к другому преобразуется
     
  15. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    K10
    в Invoke используется ADDR, так записывать удобней и проще, чем OFFSET и call.
     
  16. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    M0rg0t
    При чем здесь CALL?
    По Вашему OFFSET не используется в invoke?