Native API ZwCreateFile
Цитата:
.486
.model flat,stdcall
option casemap:none
.data
include E:\masm32\include\ntdll.inc
include E:\masm32\include\w2k\ntddk.inc
includelib E:\masm32\lib\ntdll.lib
include E:\masm32\include\w2k\ntstatus.inc
;include E:\masm32\include\w2k\ntifs.inc
include E:\masm32\include\w2k\ntoskrnl.inc
includelib E:\masm32\lib\w2k\ntoskrnl.lib
include E:\masm32\Macros\Strings.mac
CreateFile PROTO
ANSI_STRING struct
Length_ word 0
MaximumLength word 0
Buffer dword 0
ANSI_STRING ends
.data
unicodeString UNICODE_STRING<>
string_ db "\\??\\c:\\file.txt",0
.code
start:
invoke CreateFile
invoke NtTerminateProcess,-1,0
CreateFile proc
local oa:OBJECT_ATTRIBUTES
local iosb:IO_STATUS_BLOCK
local hFile:HANDLE
local ansiString:ANSI_STRING
invoke RtlInitAnsiString,addr ansiString,addr string_
invoke RtlAnsiStringToUnicodeString,addr unicodeString,addr ansiString, TRUE
invoke NtDisplayString, addr unicodeString
InitializeObjectAttributes offset oa, offset unicodeString, NULL, NULL, NULL
invoke ZwCreateFile, addr hFile, FILE_APPEND_DATA, addr oa, addr iosb, 50, FILE_ATTRIBUTE_NORMAL, \
FILE_SHARE_WRITE, FILE_CREATE, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0
.if eax == STATUS_SUCCESS
invoke ZwClose, hFile
.else
.endif
ret
CreateFile endp
end start
Может такой вариант не катит по Windows XP?
а какой NTSTATUS код возврата?
Цитата: bagie2
а какой NTSTATUS код возврата?
= 0xС000000D
string_ db "\\??\\c:\\file.txt",0
какое-то непонятное имя файла, не подходит ни под обычный стиль, ни под сишный.
давно не юзал MASM, не помню в каком стиле там объявляются строки
string_ db "\\?\c:\file.txt",0 ; обычный стиль
string_ db "\\\\\?\\c:\\file.txt",0 ; сишный стиль
хм нет все равно одна и таже ошибка, в обоих случаях
что за 50?
Цитата: Phodopus
что за 50?
Ну на сколько мне известно это должен быть размер файла, но я пробовал и с нулевым вариантом, так что проблема видимо в другом
Цитата: palevo060
Ну на сколько мне известно это должен быть размер файла, но я пробовал и с нулевым вариантом, так что проблема видимо в другом
Нну-ну! Идем курить маны. Разрабоднидчкы.
Цитата:
AllocationSize
A pointer to a LARGE_INTEGER that contains the initial allocation size, in bytes, for a file that is created or overwritten. Указатель содержит LARGE_INTEGER, что первоначальный размер кластера в байтах для файла, который создается или перезаписывается. If AllocationSize is NULL, no allocation size is specified. Если AllocationSize является NULL, не указан размер кластера. If no file is created or overwritten, AllocationSize is ignored. Если файл не созданы или переписаны, игнорируется AllocationSize.
A pointer to a LARGE_INTEGER that contains the initial allocation size, in bytes, for a file that is created or overwritten. Указатель содержит LARGE_INTEGER, что первоначальный размер кластера в байтах для файла, который создается или перезаписывается. If AllocationSize is NULL, no allocation size is specified. Если AllocationSize является NULL, не указан размер кластера. If no file is created or overwritten, AllocationSize is ignored. Если файл не созданы или переписаны, игнорируется AllocationSize.
Скурил и подставил, все что только мог и NULL и это-LARGE_INTEGER, и указатель на этоже (LARGE_INTEGER) и структуру вроде заполннил
Цитата:
local siz:LARGE_INTEGER
mov eax,10
mov siz.LowPart,eax
mov eax,1000
mov siz.HighPart,eax
InitializeObjectAttributes offset oa, offset unicodeString, NULL, NULL, NULL
invoke ZwCreateFile, addr hFile, FILE_APPEND_DATA, addr oa, addr iosb,addr siz, FILE_ATTRIBUTE_NORMAL, \
FILE_SHARE_WRITE, FILE_CREATE, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0
Уже даже не знаю. У меня чувство, что если я еще раз спрошу, что же тут не так то мне дадут в морду с батинка :(
с флагом FILE_SYNCHRONOUS_IO_NONALERT надо юзать FILE_APPEND_DATA+SYNCHRONIZE
Цитата:
.486
.model flat,stdcall
option casemap:none
.data
include E:\masm32\include\ntdll.inc
include E:\masm32\include\w2k\ntddk.inc
includelib E:\masm32\lib\ntdll.lib
include E:\masm32\include\w2k\ntstatus.inc
;include E:\masm32\include\w2k\ntifs.inc
include E:\masm32\include\w2k\ntoskrnl.inc
includelib E:\masm32\lib\w2k\ntoskrnl.lib
include E:\masm32\Macros\Strings.mac
CreateFile PROTO
ANSI_STRING struct
Length_ word 0
MaximumLength word 0
Buffer dword 0
ANSI_STRING ends
.data
unicodeString UNICODE_STRING<>
string_ db "\\\\\?\\c:\\file.txt",0
string_2 db "\\?\c:\file.txt",0
nnn db 100 dup(0)
.code
start:
invoke CreateFile
invoke NtTerminateProcess,-1,0
CreateFile proc
local oa:OBJECT_ATTRIBUTES
local iosb:IO_STATUS_BLOCK
local hFile:HANDLE
local siz:LARGE_INTEGER
local ansiString:ANSI_STRING
invoke RtlInitAnsiString,addr ansiString,addr string_2
invoke RtlAnsiStringToUnicodeString,addr unicodeString,addr ansiString, TRUE
invoke NtDisplayString, addr unicodeString
mov eax,10
mov siz.LowPart,eax
mov eax,1000
mov siz.HighPart,eax
InitializeObjectAttributes offset oa, offset unicodeString, NULL, NULL, NULL
xor eax,eax
mov oa.SecurityDescriptor,eax
invoke ZwCreateFile, addr hFile, FILE_APPEND_DATA+SYNCHRONIZE, addr oa, addr iosb,addr siz, FILE_ATTRIBUTE_NORMAL, \
FILE_SHARE_WRITE, FILE_CREATE, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0
.if eax == STATUS_SUCCESS
invoke ZwClose, hFile
.endif
;mov eax, iosb.Information
xor edx,edx
mov ecx,4
@1:
mov bl,al
and bl,0Fh
.if bl <= 9 && bl >= 0
add bl,30h
.else
add bl,37h
.endif
mov byte ptr [nnn+edx],bl
mov bh,al
and bh,0F0h
ror bh,4
.if bh <= 9 && bh >= 0
add bh,30h
.else
add bh,37h
.endif
inc edx
mov byte ptr [nnn+edx],bh
inc edx
ror eax,8
loop @1
invoke RtlInitAnsiString,addr ansiString,addr nnn
invoke RtlAnsiStringToUnicodeString,addr unicodeString,addr ansiString, TRUE
invoke NtDisplayString, addr unicodeString
ret
CreateFile endp
end start
.model flat,stdcall
option casemap:none
.data
include E:\masm32\include\ntdll.inc
include E:\masm32\include\w2k\ntddk.inc
includelib E:\masm32\lib\ntdll.lib
include E:\masm32\include\w2k\ntstatus.inc
;include E:\masm32\include\w2k\ntifs.inc
include E:\masm32\include\w2k\ntoskrnl.inc
includelib E:\masm32\lib\w2k\ntoskrnl.lib
include E:\masm32\Macros\Strings.mac
CreateFile PROTO
ANSI_STRING struct
Length_ word 0
MaximumLength word 0
Buffer dword 0
ANSI_STRING ends
.data
unicodeString UNICODE_STRING<>
string_ db "\\\\\?\\c:\\file.txt",0
string_2 db "\\?\c:\file.txt",0
nnn db 100 dup(0)
.code
start:
invoke CreateFile
invoke NtTerminateProcess,-1,0
CreateFile proc
local oa:OBJECT_ATTRIBUTES
local iosb:IO_STATUS_BLOCK
local hFile:HANDLE
local siz:LARGE_INTEGER
local ansiString:ANSI_STRING
invoke RtlInitAnsiString,addr ansiString,addr string_2
invoke RtlAnsiStringToUnicodeString,addr unicodeString,addr ansiString, TRUE
invoke NtDisplayString, addr unicodeString
mov eax,10
mov siz.LowPart,eax
mov eax,1000
mov siz.HighPart,eax
InitializeObjectAttributes offset oa, offset unicodeString, NULL, NULL, NULL
xor eax,eax
mov oa.SecurityDescriptor,eax
invoke ZwCreateFile, addr hFile, FILE_APPEND_DATA+SYNCHRONIZE, addr oa, addr iosb,addr siz, FILE_ATTRIBUTE_NORMAL, \
FILE_SHARE_WRITE, FILE_CREATE, FILE_SYNCHRONOUS_IO_NONALERT, 0, 0
.if eax == STATUS_SUCCESS
invoke ZwClose, hFile
.endif
;mov eax, iosb.Information
xor edx,edx
mov ecx,4
@1:
mov bl,al
and bl,0Fh
.if bl <= 9 && bl >= 0
add bl,30h
.else
add bl,37h
.endif
mov byte ptr [nnn+edx],bl
mov bh,al
and bh,0F0h
ror bh,4
.if bh <= 9 && bh >= 0
add bh,30h
.else
add bh,37h
.endif
inc edx
mov byte ptr [nnn+edx],bh
inc edx
ror eax,8
loop @1
invoke RtlInitAnsiString,addr ansiString,addr nnn
invoke RtlAnsiStringToUnicodeString,addr unicodeString,addr ansiString, TRUE
invoke NtDisplayString, addr unicodeString
ret
CreateFile endp
end start
погляди аттач. я сделал пример на фасме. работает.
Цитата: bagie2
погляди аттач. я сделал пример на фасме. работает.
Спс посмотрю, но сеня не успею уже.