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 é!!!