Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/96: Рейтинг темы: голосов - 96, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
1

CreateFile() == INVALID_HANDLE_VALUE

11.08.2013, 03:43. Показов 19417. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вызов происходит с такими параметрами:

C++
1
2
3
4
5
6
7
8
9
HANDLE hFile = CreateFile(
                                     "out.bin",                       //с полным путем тоже пробовал
                                      GENERIC_WRITE,    // тоже + GENERIC_READ | GENERIC_WRITE
                                      NULL,                   // + FILE_SHARE_READ | FILE_SHARE_WRITE
                                      NULL,  
                                      CREATE_ALWAYS,
                                      FILE_ATTRIBUTE_NORMAL,
                                      NULL
                                    )
К сожалению всегда возвращает -1.
Где ошибка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2013, 03:43
Ответы с готовыми решениями:

INVALID_HANDLE_VALUE при попытке найти файл
Приветствую. В таком вот коде : WIN32_FIND_DATA FindFileData; HANDLE hf; ...

Функция CreateFile
Добрый день. У меня такая проблема при работе с функцией: функция CreateFile возвращает -1, если ей...

CreateFile, WriteFile
Подскажите работающий код программы на с++, которая создаёт файл с помощью CreateFile

Ошибки CreateFile
File=CreateFile(FileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL); Что происходит,...

30
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.08.2013, 19:20 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Специально проверил на WIN7 VS2012 папка проекта на рабочем столе всё отрабатывает.
И у меня тоже все ок.
Могу предположить еще один вариант, снова связанный с security: процесс, который
запускается, каким-то образом получает дескриптор безопасности, в котором отсутствуют
разрешения на доступ к данному файлу. Например, процесс выполняется на low integrity level.

Добавлено через 1 минуту
Других вариантов (если не считать вмешательства каких-нибудь антивирусов) у меня нет.
1
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
11.08.2013, 19:32  [ТС] 22
Переделал на ассемблера под х64 и снова тотоже (р)возврат:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
format PE64
entry begin
 
include 'win64ax.inc'
 
section 'data' data readable writeable
 
_fN  db 'C:\Users\Myname\Desktop\out\out.bin',0
_str db "invalid",0
hFile   dq  ?
 
 
section 'code' code readable executable
begin:
 
sub rsp,8*10
 
 
xor rcx,rcx ;
mov rdx,FILE_ATTRIBUTE_NORMAL
mov r8,CREATE_ALWAYS
xor r9,r9
push 0
push GENERIC_WRITE
mov rdx,_fN
push rax
call [CreateFileA]
 
 
cmp rax, 0FFFFFFFFFFFFFFFFh
je ihv
 
exit: xor rcx,rcx
call [ExitProcess]
 
ihv:
mov rcx,MB_OK
mov rdx, _str
mov r8, _str
xor r9,r9
call [MessageBoxA]
 
jmp exit
;==========================================
 
section "import" import data readable writeable
 
  dd 0,0,0,RVA name_kernel,RVA table_kernel
  dd 0,0,0,RVA name_user,RVA table_user        
  dd 0,0,0,0,0
 
 
  table_kernel:
    ExitProcess dq RVA _ExitProcess
    CreateFileA    dq RVA _CreateFileA
    dq 0
  table_user:
    MessageBoxA dq RVA _MessageBoxA
    dq 0
 
 
 
  name_kernel db 'KERNEL32.DLL',0
  name_user db 'USER32.DLL',0
 
 
  _ExitProcess dw 0
    db 'ExitProcess',0
  _CreateFileA dw 0
    db 'CreateFileA',0
 
  _MessageBoxA dw 0
    db 'MessageBoxA',0
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.08.2013, 19:52 23
Спрошу на прощание - а GetLastError везде тот же, 5 (access denied) ?
1
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
11.08.2013, 19:53  [ТС] 24
CreateFile() == INVALID_HANDLE_VALUE
0
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
11.08.2013, 20:05  [ТС] 25
Цитата Сообщение от Убежденный Посмотреть сообщение
Спрошу на прощание - а GetLastError везде тот же, 5 (access denied) ?
Тоже 5.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.08.2013, 20:51 26
Ultima ratio (в порядке бреда).
Что, если из этой программы запустить (через CreateProcess) cmd.exe, а в
открывшейся консоли набрать "del имя-файла" ? Файл out.bin можно удалить
таким способом или нет ? Если нет - значит у процесса не все в порядке с
дескриптором безопасности и система не разрешает ему открывать данный
файл с правами на удаление-изменение. Хотя это все ну о-очень странно...
1
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
11.08.2013, 21:16  [ТС] 27
Цитата Сообщение от Убежденный Посмотреть сообщение
Ultima ratio (в порядке бреда).
Что, если из этой программы запустить (через CreateProcess) cmd.exe, а в
открывшейся консоли набрать "del имя-файла" ? Файл out.bin можно удалить
таким способом или нет ? Если нет - значит у процесса не все в порядке с
дескриптором безопасности и система не разрешает ему открывать данный
файл с правами на удаление-изменение. Хотя это все ну о-очень странно...
Выдает что файл открит в другой программе. В этот момент Unlocker выдает ахинею:
CreateFile() == INVALID_HANDLE_VALUE
0
Заблокирован
Автор FAQ
11.08.2013, 21:19 28
Цитата Сообщение от hello_hell Посмотреть сообщение
К сожалению if true. Что за машина и ось?
- написано чёрным по белому
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
пециально проверил на WIN7 VS2012 папка проекта на рабочем столе
первый скрин ХР 32 VS 2008

Добавлено через 1 минуту
hello_hell, если не рабаотет и до сих пор у тебя или кривая ИДЕ или не знаю RECYCL.BIN пытаешся переписать. Ищи косяк в студии, больше грешить не на что.
1
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
11.08.2013, 21:19 29
Цитата Сообщение от hello_hell Посмотреть сообщение
Выдает что файл открит в другой программе.
Как Вы тогда его проводником удаляли ? Система ведь не даст удалить файл,
открытый в другой программе.
1
-=ЮрА=-
11.08.2013, 21:26
  #30

Не по теме:

Убежденный, у меня есть подозрение, что человек хочет переписать что-то например exe какой-нибудь.
Запрет на доступ бывает когда хотим переписать запущенный explorer winlogon svchost и т.д, доп вариантом идёт кривизна студии, тоже частое явление. Ещё можно напороться на Recycle.bin (корзину), который тоже конечно не перепишешь

1
0 / 0 / 0
Регистрация: 11.08.2013
Сообщений: 26
12.08.2013, 00:28  [ТС] 31
Оказывается это банально блокировка антивируса, но все-равно всем огромное спасибо. Тема закрыта.
0
12.08.2013, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2013, 00:28
Помогаю со студенческими работами здесь

WinAPI CreateFile
хай.. сорри тупой вопрос.. хочу чтоб в функции создания файла можна самому вписать имя файла.. но...

Создать файл на с++ (createfile)
подскажите код программы, которая создаст с помощью createfile текстовый файл в корневом каталоге...

CreateFile and ReadFile, WinAPI
всем доброго времени суток! открываю текстовый файл и вывожу содуржимое в консоль: char buf;...

CreateFile несколько файлов
Хочу последовательно открыть несколько файлов, использую функцию CreateFile. Открываю первый файл,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru