Batch-Satti
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Batch-Satti

Você não está conectado. Conecte-se ou registre-se

Gravar um Arquivo em um local especifico do HDD

2 participantes

Ir para baixo  Mensagem [Página 1 de 1]

goncalvesk



Boa Tarde a todos,

estou tentado gravar um dado em um setor especifido do HDD, por exemplo, que gravar algo no começo, outro no meio e um no fim do disco, e verificar se já existe algo nesse ponto, caso exista, somar +1 ou algo do tipo

Alguem conhece algum script que consiga fazer isso??


obrigado

C-Com

C-Com

O jeito seria usar Assembler integrado. Dá pra fazer isso sim, o problema maior é o risco. Primeiro porque é preciso identificar o tipo de tabela de alocação do disco pra se fazer a escrita corretamente e exige rigor absoluto. Um erro maior poderia até inutilizar o HD (ou o que quer que/onde seja)...

C-Com

C-Com

Eu fiz um script, porém não me responsabilizo por uso incorreto. A responsabilidade é total de quem se interessar em utilizá-lo. Foi testado? Sim, foi (em disquetes, sim, você leu ISSO mesmo, eu ainda TENHO UM DRIVER de dis-que-tches). Então eu recomendo um bocado de atenção na hora de usá-lo em HDs, Pendrive, etc.

[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Código:

@echo off

if not exist "%1" goto sintax
if "%2"=="" goto sintax
if "%3"=="" goto sintax
if "%4"=="" goto sintax

setlocal enabledelayedexpansion

for /f %%f in ("nconvert.bat") do set hscript=%%~$PATH:f

if "%hscript%"=="" (
        echo Script de conversÆo "nconvert.bat" nÆo encontrado!
        echo Registre o diret¢rio do script na vari vel path ou
        echo copie-o para uma pasta do sistema.
   goto quit
   )

set filedump=%~s1
set filesize=%~z1

call "%hscript%" %filesize% 0123456789ABCDEF
set filesize=!nconvert!

set /a ncmp=%~3
if %ncmp% equ 0 (
   
   goto sintax
   
   ) else (
   
   call "%hscript%" %ncmp% 0123456789ABCDEF
   set blckfrst=!nconvert!
   )

set /a ncmp=%~4
if %ncmp% equ 0 (
   
   goto sintax
   
   ) else (
   
   call "%hscript%" %ncmp% 0123456789ABCDEF
   set blckend=!nconvert!
   )

set drvupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set drvlower=abcdefghijklmnopqrstuvwxyz

for /l %%l in (0,1,25) do (
   if "%2"=="!drvupper:~%%l,1!" set nndriver=%%l
   if "%2"=="!drvlower:~%%l,1!" set nndriver=%%l
   )

if "%filedump%"==""  goto sintax
if "%nndriver%"==""  goto sintax
if "%filesize%"==""  goto sintax
if "%filesize%"=="0" goto sintax
if "%blckend%"=="0"  goto sintax
if "%blckfrst%"=="0" goto sintax
if "%blckend%"==""  goto sintax
if "%blckfrst%"==""  goto sintax


echo.
echo ------------
echo Informa‡äes:
echo ------------
echo.
echo O arquivo original se chama "%filedump%"
echo A letra da unidade ‚ "%2", o n£mero ‚ "%nndriver%"
echo O tamanho do arquivo original ‚ de "%filesize%" (hex) bytes
echo.
echo "%blckfrst%" (hex) ser  o primeiro setor do disco a ser escrito e
echo a partir dele serÆo escritos "%blckend%" (hex) setores.
echo.
echo As informa‡äes acima estÆo corretas? Escolha um op‡Æo e pressione enter
echo [S] = sim [N] = NÆo
echo.
set /p chooseopt=

if "%chooseopt%"=="S" goto proceed
if "%chooseopt%"=="s" goto proceed
goto quit

:proceed
(
echo n %filedump%
echo l
echo rcx
echo %filesize%
echo w cs:100 %nndriver% %blckfrst% %blckend%
echo q
)|debug
goto quit


:sintax
echo.
echo -------------------------------------------------------
echo blockwrite [arquivo] [unidade] [1o Sstor] [qtd setores]
echo -------------------------------------------------------
echo.
echo Escreve uma informa‡Æo a partir de um arquivo [arquivo] em setor(es)
echo espec¡fico(s) [qtd setores] do disco [unidade], partindo do setor [1o setor]
echo.
echo ESTE SCRIPT  ABSOLUTAMENTE SEM GARANTIA. A RESPONSABILIDADE DE USO 
echo TOTAL DAQUELE QUE SE DISPåE A USµ-LO.
echo.


:quit
endlocal



Sintaxe:
blockwrite [arquivo original] [unidade] [1 setor] [qt setores]

blockwrite = É o script.

[arquivo] = O arquivo original

[unidade] = Unidade DESTINO onde você quer reescrever o arquivo original

[1o setor] = Número (EM BYTES!) do primeiro setor onde será feita a gravação.

Provavelmente eu não vou precisar dizer o cuidado que é necessário aqui... Escrever nos primeiros setores de um HD por exemplo pode até danificar o MBR. Ou pior, porque o MBR é recuperável e dá até pra mudá-lo de lugar com uma gambiarra e evitar um estrago maior (ou alguns vírus), mas poderia por exemplo, corromper arquivos importantes ou danificar a tabela de alocação do HD.

É importante ressalvar (pra não haver risco) que gravações no disco são feitas por setores e não por bytes. Então, pra você especificar um endereço de setor e "pular fora" de partes importante do disco você PRECISA saber qual é o tamanho da unidade de alocação do disco (cluster) que você está escrevendo. Cada cículo concêntrico (o HD é um disco) de setores é uma TRILHA e um grupo de trilhas (ou setores!) é um CLUSTER

Usa o comando "chkdsk" (win 2k/XP) e vai aparecer uma mensagem mais ou menos assim:

"4096 bytes em cada unidade de alocação"

Então o tamanho do cluster usado na última formatação daquela unidade é de 4096 bytes!

[qt setores] = (EM BYTES!) Quantidade de setores que serão usados a partir do [1o setor]

Observações importantes:

1 - Você só vai usar se concordar que sabe o que está fazendo e que o script não tem garantia nenhuma do autor.

2 - Você VAI precisar desse script aqui (pra converter o valor de bytes para hexadecimal):
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

3 - Não há "arquivo destino". (Porque?) Porque estamos fazendo uma escrita DIRETA em setores do disco! Um arquivo é muito mais do que "um conjunto" de bytes. Então, você tem que saber muito bem o que está fazendo (sei que falei várias vezes, mas é necessário de verdade)

4 - Não é possível utilizar arquivos muito extensos (em tamanho) pois o debug é utilizado no WindowsNT/2k/XP apenas por questão de compatibilidade com programas antigos, o que remete ao uso da antiga memória alta, e por padrão, não é ativado o uso da memória estendida!

Pode ser que aconteça uma mensagem mais ou menos assim:

"Memória insuficiente" ou algo do tipo "EMMS" "XMMS" "não encontrado"... (não lembro de cabeça agora)

Então, se você REALMENTE precisar escrever parte de um arquivo que exceda o limite de memória, recomendo que edite-o em um programa qualquer que possa "cortá-lo" (apenas a parte que quer).

5 - Pode ser que esta mensagem apareça:

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

Não sei ainda exatamente o porquê de "para o qual não há suporte". Vou dar uma estudada nisso qd tiver + tempo. Todas as vezes que apareceu esta msg eu fechei (não prossegui) pq eu não sei ainda o que é!!!

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos