Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 14:42   #1
alexdrew
 
Регистрация: 10.03.2009
Сообщений: 8
По умолчанию Запрет доступа к файлам директории

Здравствуйте. Мне нужно организовать программу запрета доступа к файлам в выбранной директории. Подскажите как это можно сделать.Это нужно делать с каждым файлом в отдельности, или есть возможность наложить это ограничение сразу на директорию?
alexdrew вне форума Ответить с цитированием
Старый 03.05.2010, 15:57   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Думаю тебе нужно под windows, тогдасмотри в сторону API CreateFile(...),а если не получится, то напишем тебе код
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 03.05.2010, 16:17   #3
alexdrew
 
Регистрация: 10.03.2009
Сообщений: 8
По умолчанию

спасибо за то, что откликнулся.но мне нужно под DOS. Я пишу резидентную TSR программу, и вроде все там понятно, кроме этого.
Вот нашел код вроде:
Код:
.model tiny
	.code
	.186
	org 100h
 
start:
	push cs			;на всякий случай, приравняем cs и ds
	pop ds			;хотя в COM-файле они и так равны
 
	mov ah, 9			;выводим на экран сообщение
	lea dx, msgpathrequest	;в сообщении - просьба ввести имя каталога
	int 21h
 
	mov ah, 0Ah		;вводим с клавиатуры строку
	lea dx, path		;указываем на буфер ввода
	int 21h			;буфер ввода имеет хитрую структуру
				;первый байт - макс длина буфера
				;во второй байт система положит количество считанных символов
				;а с третьего байта начинается собственно буфер
 
	lea dx, pathstring		;возьмём адрес начала введённой строки
	push dx			;сохраним - этот адрес ещё понадобится
	add dl, byte ptr[pathactual]	;к началу строки прибавим её длину, которую вернула предыдущая функция
	xor al, al		;поправим старший регистр
	adc dh,al			;типа а вдруг перенос? :)
	mov di, dx		;поскольку имя каталога должно кончаться нулём,
	mov byte ptr[di], al	;дадим ему в конце этот нуль
 
	mov ah, 3Bh		;сменим каталог
	pop dx			;на тот, что вводили
	int 21h
	jc no_such_directory	;а если его нету - пойдём ругаться
 
	mov ax, 4E01h		;найдём первый файл в текущем каталоге
	xor cx, cx		;так можно очень быстро положить ноль в любой регистр
	lea dx, searchmask		;возьмём указатель на маску поиска
	int 21h
	jc no_more_files		;если была ошибка - пойдём ругаться
 
searching:
	mov ax, 4301h		;будем менять атрибуты файла
	mov cx, 2			;атрибут hidden
	mov dx, 80h+1Eh		;смещение самой DTA плюс смещение имени файла в DTA
	int 21h			;собственно, меняем
 
	mov ax, 4F00h		;ищем следующий файл
	int 21h
	jc finished		;если не находим - выйдем
 
	mov ax, 4301h		;снова меняем атрибуты файла
	mov cx, 1			;на этот раз будет атрибут readonly
	mov dx, 80h+1Eh		;смещение самой DTA плюс смещение имени файла в DTA
	int 21h			;меняем атрибут
 
	mov ax, 4F00h		;ищем следующий файл
	int 21h
	jc finished		;если не находим - выйдем
 
	jmp searching		;закрываем цикл
 
no_such_directory:
	mov ah, 9			;будем ругаться
	lea dx, msgnosuchdir	;вот такими словами
	int 21h
	jmp finished
 
no_more_files:
	mov ah, 9			;будем ругаться
	lea dx, msgnomorefiles	;вот такими словами
	int 21h
 
finished:
	int 20h			;выходим из программы
 
 
msgpathrequest	db 0Ah, 0Dh, "Enter the full directory name: $"
msgnomorefiles	db 0Ah, 0Dh, "No files found in current directory$"
msgnosuchdir	db 0Ah, 0Dh, "No such directory$"
searchmask	db "*.*",0	;маска поиска файлов
path		label byte	;указатель на буфер ввода строки
pathlen		db 66
pathactual	db ?
pathstring	db 66 dup (?)
 
end start

Непонятно только одно осталось-как запретить доступ к файлу. Я вообще думал, что Есть что-то подобное. Но пока не могу ниче найти. А делать скрытым или только чтение-это не то по-моему

Последний раз редактировалось Stilet; 03.05.2010 в 16:49.
alexdrew вне форума Ответить с цитированием
Старый 03.05.2010, 19:49   #4
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Тебе тогда осталось использовать функцию DOS 5cH: блокировать/разблокировать доступ к файлу
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 04.05.2010, 14:58   #5
alexdrew
 
Регистрация: 10.03.2009
Сообщений: 8
По умолчанию

Вот, переделал. Но что то не работает



Код:
.CODE
org 100h 
 
MOV CL,ES:80H 
CMP CL,0
JE INP_1


XOR DX,DX
XOR CH,CH
MOV DX,CX

CLD

MOV DI,81H
MOV AL,' '
REPE SCASB
DEC DI
INC CL
PUSH CX


MOV SI,DI 
MOV DI,OFFSET KEY
REP MOVSB 
POP CX
XOR CH,CH
MOV byte PTR[DI],0H

LEA DX, KEYFLD1
PUSH DX 

JMP ENDIN

INP_1:
;OUTPUT MESSAGE 

MOV AH,09h
lea DX,mes
int 21h


;INPUT pathNAME
MOV AH,0Ah 
lea DX,KEY 
int 21h




LEA DX, KEYFLD1
PUSH DX
ADD DL,BYTE PTR[ACTLEN1]
XOR AL,AL

MOV DI,DX
MOV BYTE PTR[DI],AL                 

ENDIN:

; SEARCH AND DISACTIVATE

    mov     ah, 3Bh	
	pop     dx			
	int     21h
	jc      no_such_directory	
 
	mov     ax, 4E01h		
	xor     cx, cx		
	lea     dx, searchmask		
	int     21h
	jc      no_more_files		
 
searching:

    mov     aX, 5C00h
    mov     bx, 80h+1Eh
    mov     cx,0
    mov     dx,0
    mov     si,0ffffh
    mov     di,0ffffh		
	int     21h			
 
	mov     ax, 4F00h		
	int     21h
	jc      finished		
 
	jmp     searching		
 
no_such_directory:
		mov     ah, 09
					
	lea     dx, KEY	
	int     21h
	
	mov     ah, 09			
	lea     dx, msgnosuchdir	
	int     21h
	jmp     finished
 
no_more_files:
	mov     ah, 09			
	lea     dx, msgnomorefiles	
	int     21h
 
finished:      
	int     20h	


;=============================================================================




mes: DB 13,10, 'INPUT PATHNAME PLEASE:',13,10,'$'


KEY label byte;ATTRIBUTES
MAXLEN1 DB 100      ;MAX DLINA
ACTLEN1 DB ?       ;REAL DLINA
KEYFLD1 DB 100 DUP(?),'$'  ;GDE BUDET NAHODITSA  

msgnomorefiles	db 0Ah, 0Dh, "No files found in current directory$"
msgnosuchdir	db 0Ah, 0Dh, "No such directory$"
searchmask	db "*.*",0	                                                                          
ret

Последний раз редактировалось alexdrew; 04.05.2010 в 19:22.
alexdrew вне форума Ответить с цитированием
Старый 04.05.2010, 19:22   #6
alexdrew
 
Регистрация: 10.03.2009
Сообщений: 8
По умолчанию

Я думаю что неправильно задал параметры в функции запрета доступа:

Код:
mov aX, 5C00h
mov bx, 80h+1Eh
mov cx,0
mov dx,0
mov si,0ffffh
mov di,0ffffh 
int 21h
alexdrew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск ключевого слова по текстовым файлам в заданной директории....помогите плиз N-tony Общие вопросы C/C++ 0 07.01.2010 14:46
Права доступа к директории Linel PHP 7 04.12.2009 16:23
Запрет доступа программно Rusl92 Общие вопросы Delphi 12 12.11.2008 19:17
Нет доступа к файлам на кирилеце. mogul82 PHP 2 11.11.2008 17:02
Запрет доступа к локальному диску С... Алексис Безопасность, Шифрование 3 04.08.2007 22:03