strcpy

Тема в разделе "WASM.NT.KERNEL", создана пользователем Cristoff, 8 июн 2009.

  1. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    Код пишется в wdk для драйвера фильтра.
    Код (Text):
    1. void foo(CHAR* sName){
    2. CHAR s1[100];
    3. strcpy(s1,sName);
    4. }
    build выводит ошибку "error C2220: warning treated as error - no 'object' file generated" на строке с "strcpy(s1,sName);"
    Подскажите в чем может быть дело? В ДДК для сервера2003 такого не было...
    Наверное я подзабыл основы С и теперь не пойму из-за чего происходит ошибка.
    Пробывал strcpyn, strcpy(&s1,sName)...

    Помогите кто может.
     
  2. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    strcpy потенциально опасная операция. Нужно использовать StringCchCopyA или StringCbCopyA.
     
  3. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    Поправка:
    собирал в free build. Но как оказалось в checked build прошло без ошибок.
     
  4. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    Ок, а где эти функции находятся?
     
  5. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    strsafe.h
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    <ntstrsafe.h>
    RtlStringCchCopy
     
  7. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    после использования включения #include <strsafe.h>
    при сборке free build появляется ошибка

    c:\winddk\6001.18002\inc\crt\stdio.h(268) : error C2220: warning treated as error - no 'object' file generated

    порядок модулей:
    #include <fltkernel.h>
    #include <dontuse.h>
    #include <suppress.h>
    #include <ntddk.h>
    #include <strsafe.h>

    так ли необходима компиляция в free build?
     
  8. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    аналогично...
     
  9. WRP

    WRP New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2009
    Сообщения:
    29
    Cristoff

    Покажите как выглядит файл sources .
    Вполне возможно надо убрать ключ -WX
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    блин, эта ошибка означает что предупреждение согласно правилам сборки посчиталось за ошибку.
    но НИЖЕ идет текст самого предупреждения. следующую строчку с ворнингом тоже надо показывать, если хочешь ответа
     
  11. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    Полный оутпут:

    Код (Text):
    1. BUILD: Compile and Link for x86
    2. BUILD: Loading c:\winddk\6001.18002\build.dat...
    3. BUILD: Computing Include file dependencies:
    4. BUILD: Start time: Tue Jun 09 13:58:58 2009
    5. BUILD: Examining j:\drivers\testfiltr directory for files to compile.
    6. BUILD: Saving c:\winddk\6001.18002\build.dat...
    7. BUILD: Compiling and Linking j:\drivers\testfiltr directory
    8. _NT_TARGET_VERSION SET TO WINXP
    9. Compiling - nullfilter.c
    10. errors in directory j:\drivers\testfiltr
    11. c:\winddk\6001.18002\inc\crt\stdio.h(268) : error C2220: warning treated as error - no 'object' file generated
    12. Linking Executable - objfre_wxp_x86\i386\nullfilter.sys
    13. link : error LNK1181: cannot open input file 'j:\drivers\testfiltr\objfre_wxp_x86\i386\nullfilter.obj'
    14. BUILD: Finish time: Tue Jun 09 13:59:05 2009
    15. BUILD: Done
    16.  
    17.     3 files compiled - 15 Warnings - 1 Error - 713 LPS
    18.     1 executable built - 1 Error
    Файл сурсес:
    Код (Text):
    1. TARGETNAME=nullFilter
    2. TARGETTYPE=DRIVER
    3. DRIVERTYPE=FS
    4.  
    5.  
    6. TARGETLIBS= $(TARGETLIBS) \
    7.             $(IFSKIT_LIB_PATH)\fltMgr.lib
    8.  
    9. SOURCES=nullFilter.c \
    10.         nullFilter.rc
     
  12. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Возможно компилятору не нравиться что ф-ция foo - пустышка, т.е. не несет никакой полезной нагрузки.
     
  13. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    фу функция гипотетическая и написана только для форума, чтобы показать на чем ошибка.
    Но дело не в том... а в том, что ошибку выдает на системной библиотеке.
    Как бы она не является ошибкой, а просто предупреждением и фри сборка более критична к предупреждениям поэтому и дает ошибку в отличе от чекед сборки, которая игнорирует предупреждения.

    Так ли оно опасно?
     
  14. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Опасна ли функция которую компилятор даже не вставит в код? Мм.. наврятли =)
     
  15. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    А вот у меня мой чистый C-компилятор не допускает локальные переменные такие как массив, т.е. должно быть так:

    Код (Text):
    1. CHAR s1[100];
    2.  
    3.  
    4. void foo(CHAR* sName){
    5.  
    6. strcpy(s1,sName);
    7. }
     
  16. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    int2eh
    Я так понимаю, если уж переполнять буфер так масштабно, а не внутри функции...

    --------
    Подскажите по реальному коду:
    Код (Text):
    1. FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject );
    2.         Data->IoStatus.Status = STATUS_ACCESS_DENIED;
    3.         Data->IoStatus.Information = 0;
    4.         status = FLT_POSTOP_FINISHED_PROCESSING;
    5.     return status;
    Почему он вызывает бсод с PAGE_FAULT_IN_NONPAGED_AREA и кодом 50.
    Использовал кусок кода из рабочего примера минифильтра scanner из вдк.
    Причем ошибка может и не появится... Но как правило все-таки происходит.
     
  17. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    Код вызывается при срабатывании условия в обработчике Post От Irp в IRP_MJ_CREATE
     
  18. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    А почему ты запрещаешь операцию в Post-create, а не в Pre-create? Для этого есть какие-то особые причины? Если нет, тогда это следует делать в Pre-create. Уже обсуждалось.
     
  19. Cristoff

    Cristoff New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2009
    Сообщения:
    20
    x64
    в случае Pre-create происходит то же самое.
     
  20. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    А ты в Pre-create тоже FltCancelFileOpen() вызываешь?