PDA

Ver la Versión Completa : Mover el cabezal de lectura


carlocf
31-10-2005, 17:42:18
Saludos a todos Uds.

Una consulta...¿Es posible manipular el cabezal de lectura de la disketera de tal forma que lo pueda mover a una posicion especifica del diskete a fin de leer directamente en es posicion?...¿El lenguaje de Delphi me permite hacerlo o debo recurrir a rutinas en ensamblador?..Esta consulta y otras que hice al foro, se debe a una solicitud que me hicieron de crear un programa que debe ejecutarse desde un diskete, el programa al ejecutarse calcula diferentes valores los cuales deben ser guardados en el mismo diskete. Asi mismo se me pide evitar que los usuarios del diskete puedan copiarlo el EXE a otros disketes. Para solucionar este problema planeo marcar los disketes fisicamente de tal forma que al ejecutarse el programa este busque la marca....estoy seguro que muchos de Uds. escucharon de esta forma antigua de proteccion y que alguno de Uds. utilizaron para proteger un sistema desarrollado...yo personalmente lo escuche pero nunca lo utilice y hoy tengo la necesidad de explorar este tema...por lo cual les solicito su valiosa ayuda...Se que el sistema no es infalible, pero creo que para los usuarios a los que esta dirigido...les sera dificil hacer una copia simple.

Atentamente
Carlo

marcoszorrilla
31-10-2005, 17:49:58
Delphi admite ensamblador:
You can write complete procedures and functions using inline assembler code, without including a begin...end statement. For example,

function LongMul(X, Y: Integer): Longint;

asm
MOV EAX,X
IMUL Y
end;
Aunque tengo el ensamblador un poco oxidado, sino recuerdo mal tienes que utilizar la interrrupción 13H con la subfunción correspondiente para leer sectores en el registro AH.

Un Saludo.

Neftali [Germán.Estévez]
31-10-2005, 17:58:48
...se debe a una solicitud que me hicieron de crear un programa que debe ejecutarse desde un diskete, el programa al ejecutarse calcula diferentes valores los cuales deben ser guardados en el mismo diskete. Asi mismo se me pide evitar que los usuarios del diskete puedan copiarlo el EXE a otros disketes. Para solucionar este problema planeo marcar los disketes fisicamente de tal forma que al ejecutarse el programa este busque la marca....estoy seguro que muchos de Uds. escucharon de esta forma antigua de proteccion y que alguno de Uds. utilizaron para proteger un sistema desarrollado...yo personalmente lo escuche pero nunca lo utilice y hoy tengo la necesidad de explorar este tema...
Esa técnica se basaba en "marcar" un sector como defectuoso, pero no guardar un dato concreto, ya que así los programas de copia no modificaban ese sector; El resultado es que el disco original tenóía un sevtor defectuoso y la copa no. No funciona como te he comentado si en lugar de marcar como defectuoso copias un dato cualquiera, porque en ese momento los programas de copia sí duplican el contenido de ese sector.
Como bien dices, no es infalible, ya que había programas de copia con las opciones para "duplicar sectores defectuosos", pero ya es algo más complicado para determinados usuarios.

Revisa éste documento a ver si te es útil:
http://support.microsoft.com/default.aspx?scid=kb;en-us;100027

Aquí (http://www.torry.net/pages.php?id=253) puedes encontrar algunos componentes de acceso directo a disco; Revisa limitaciones de sistema operatico y formato (NTFS, FAT, FAT32) a ver si alguno te es útil (desconozco si alguno podrá marcar sectores como defectuosos).

Con ésta unit puedes escribir/leer sectores de disco además de otras opciones de formateo:
http://www.efg2.com/Lab/Library/Delphi/IO/DejanMaksimovicAlfa32.zip

carlocf
31-10-2005, 18:34:17
Delphi admite ensamblador:

Aunque tengo el ensamblador un poco oxidado, sino recuerdo mal tienes que utilizar la interrrupción 13H con la subfunción correspondiente para leer sectores en el registro AH.

Un Saludo.
Estoy con Delphi 5 al menos en la literatura que tengo del sistema, lei que las instrucciones Asm de esta version solo trabajan con CPUs anteriores a la pentium pero que para las Pentium actuales tendria que usar otros Ensambladores...Te consulto si las versiones de actuales de delphi aceptaran trabajar sobre los registros de las pentium actuales. Y por otro lado hblas de la interrupcion 13H en el registro AH..funciona igual si el sistema operativo es Windows?

Gracias por la yuda
Carlo

marcoszorrilla
31-10-2005, 18:42:14
Pues como te digo hace tiempo que no programo en en Ensamblador por lo que tendrías que hacer la prueba, lógicamente utilizando una rutina de lectura de sectores, no de escritura por si acaso, en cualquiera caso creo que debieras incluir en dicha función que la unidad a leer o escribir es la unidad A, en Ensamblador = 0, B = 1, C= 2....

Un Saludo.

carlocf
31-10-2005, 18:47:11
Esa técnica se basaba en "marcar" un sector como defectuoso, pero no guardar un dato concreto, ya que así los programas de copia no modificaban ese sector; El resultado es que el disco original tenóía un sevtor defectuoso y la copa no. No funciona como te he comentado si en lugar de marcar como defectuoso copias un dato cualquiera, porque en ese momento los programas de copia sí duplican el contenido de ese sector.
Como bien dices, no es infalible, ya que había programas de copia con las opciones para "duplicar sectores defectuosos", pero ya es algo más complicado para determinados usuarios.

Revisa éste documento a ver si te es útil:
http://support.microsoft.com/default.aspx?scid=kb;en-us;100027

Aquí (http://www.torry.net/pages.php?id=253) puedes encontrar algunos componentes de acceso directo a disco; Revisa limitaciones de sistema operatico y formato (NTFS, FAT, FAT32) a ver si alguno te es útil (desconozco si alguno podrá marcar sectores como defectuosos).

Con ésta unit puedes escribir/leer sectores de disco además de otras opciones de formateo:
http://www.efg2.com/Lab/Library/Delphi/IO/DejanMaksimovicAlfa32.zip
Tengo pensado marcar el diskete con una aguja...experimente en algunos disketes ademas puedo averiguar el sector (para el caso de una aguja al punzar muy superficialmente, averigue que marco unos 10 a 40 sectores, pero que al pasar los dias esta cantidad disminuye ya que el material, al ser plastico, retorna a su forma y despues se estabiliza en un promedio de 10 a 20 sectores)...imagino que si hago un discopy, el nuevo disco tendra los mismos sectores marcados como malos...pero esto lo hara en la FAT del diskete? si es asi la tecnica no me serviria....pero que te parece la ides esta...copio un archivo de unos 500 Kb en el diskete...luego marco el diskete...con suerte o mediante una forma que hasta ahora no se....le atino a las partes donde esta el archivo...de tal forma que al momento de usar un copiador..este no podra copiar ya que no puede leer desde el diskete al menos la parte de los sectores malogrados....bueno en fin esa es la idea...con otra perspectiva, con otros puntos de vistas que Uds. me pueden dar ...podre orientarme mejor..

MIl gracias por la yuda
Atentamente
Carlo

Neftali [Germán.Estévez]
02-11-2005, 10:46:31
...Tengo pensado marcar el diskete con una aguja...experimente en algunos disketes ademas puedo averiguar el sector (para el caso de una aguja al punzar muy superficialmente, averigue que marco unos 10 a 40 sectores, pero que al pasar los dias esta cantidad disminuye ya que el material, al ser plastico, retorna a su forma y despues se estabiliza en un promedio de 10 a 20 sectores)...
Bueno, eso me parece (por decirlo suave), poco científico, poco seguro, poco sistemático, poco serio,... y muchas otras cosas.
No se si yo me atrevería a distribuir programas en disquettes a los que me he dedicado a pinchar con agujas determinados sectores....


...averigue que marco unos 10 a 40 sectores, pero que al pasar los dias esta cantidad disminuye ya que el material, al ser plastico, retorna a su forma y despues se estabiliza en un promedio de 10 a 20 sectores)...Carlo
Aunque eso sea así, me parece muy volátil, muy poco fiable ese cálculo

...imagino que si hago un discopy, el nuevo disco tendra los mismos sectores marcados como malos...
No, si lo haces con un diskcopy normal;
Justo por eso esa técnica funciona.
Si tienes un disquete original con los sectores A y B malos, al hacer un diskcopy (estandard) el disco resultante tendrá todo igual, pero los sectores A y B no estrarán marcados como malos (ya que es diskcopy copia datos, pero no se dedica a marcar sectores defectuasos en el disco destino);
El programa sólo debe comprobar que los sectores A y B son defectuosos en el disco, por eso SÍ funcionará en el disco original y NO funcionará en el disco destino copiado con DiskCopy (porque el disco destino no tendrá como defectuosos los sectores A y B).

...copio un archivo de unos 500 Kb en el diskete...luego marco el diskete...con suerte o mediante una forma que hasta ahora no se....le atino a las partes donde esta el archivo...de tal forma que al momento de usar un copiador..este no podra copiar ya que no puede leer desde el diskete al menos la parte de los sectores malogrados....
El problema es que nadie (ni el copiador, ni tu programa, ni nadie más) podrá leer ese archivo, por lo tanto no sirve de nada...
La idea es que el programa pueda comprobar algo en el disco original que en las copias no esté.
Si creas un fichero y lo "rompes/malogras" tu programa tampoco podrá leerlo y por lo tanto no sirve; De todas formas vuelvo a decir que distribuir un programa en un disquette del que no se pueden hacer copias y sobre el que te has dedicado a pinchar con una aguja, me parece muy, muy arriesgado.

marcoszorrilla
02-11-2005, 14:35:21
DiskCopy, no funciona cuando existen sectores defectuosos, en su momento existian programas copiadores que si eran capaces de copiar estos sectores.

Un Saludo.

carlocf
03-11-2005, 15:24:15
DiskCopy, no funciona cuando existen sectores defectuosos, en su momento existian programas copiadores que si eran capaces de copiar estos sectores.

Un Saludo.
Saludos a todos Uds.
El marcar fisicamente un disco con un aguja...un clavo...o con con cualquier objeto ...me permite crear un daño en la superficie del disco, la otra forma seria marcar el sector o el cluster mediante programa, pero esta marca solo se hace en la FAT, sin embargo los cluster o sectores involucrados estarian fisicamente bien....imagino que con un nuevo formateo el disco queda Ok....Por otro lado...ahora que estoy investigando la estructura de un diskette, descubri que el Cluster 1 no es utilizado, cuando paso el Norton Disk Doctor, este informa que se esta utilizando desde el cluster 2...alguno de Uds. sabe por que el cluster 1 no es utilizado ni tomado en cuenta en el calculo del tamaño del disco?..En cuanto complete las pruebas...se los comunicare y pedire buestra opinio..

Gracias por los comentarios
Carlo

Neftali [Germán.Estévez]
03-11-2005, 15:50:38
(1) El marcar fisicamente un disco con un aguja...un clavo...o con con cualquier objeto ...me permite crear un daño en la superficie del disco, la otra forma seria marcar el sector o el cluster mediante programa, pero esta marca solo se hace en la FAT, sin embargo los cluster o sectores involucrados estarian fisicamente bien....
(2) imagino que con un nuevo formateo el disco queda Ok....Por otro lado...
La afirmación (2) es correcta; Pero ese sistema sigue siendo válido; Si creas un disco con un programa y lo proteges con éste sistema, al formatearlo los sectores se habrán recuperado, pero el disco, como tú muy bien dices estará formateado, por lo tanto habrá desaparecido tu programa (= no han podido saltarse la protección).

En cuanto a la (1), no le veo vantajas a "romper" físicamente el disco. No puedes reutilizar discos (ni siquiera los de las pruebas que tú hagas) y por otro lado sigo viendo un sistema muy "impreciso" el pinchar el disco con una aguja.

carlocf
04-11-2005, 22:22:09
La afirmación (2) es correcta; Pero ese sistema sigue siendo válido; Si creas un disco con un programa y lo proteges con éste sistema, al formatearlo los sectores se habrán recuperado, pero el disco, como tú muy bien dices estará formateado, por lo tanto habrá desaparecido tu programa (= no han podido saltarse la protección).

En cuanto a la (1), no le veo vantajas a "romper" físicamente el disco. No puedes reutilizar discos (ni siquiera los de las pruebas que tú hagas) y por otro lado sigo viendo un sistema muy "impreciso" el pinchar el disco con una aguja.
Saludos Neftali
Agradezco mucho tus comentarios. Mi idea es la siguiente: si marco uno o varios clusters por soft este lo hara solo en la FAT, fisicamente la informacion que se encuentre en esos cluster no sera tocada y estara disponible sin importar que la FAT indique lo contrario. De esta forma se podra tener acceso a esa informacion con una lectura directa del cluster...

Pero mi idea es la de marcar fisicamente el cluster sin que este tenga informacion. Una verificacion del disco o un nuevo formateo con una herramienta apropiada, marcara los clusters malogrados en la FAT.
Hasta este punto tendria un disco con clusters malogrados en la area de datos y con los mismos clusters marcados en la FAT, como no disponibles. Si se utiliza una herramienta de copia de discos y que ademas copie cluster a cluster, creara una copia del disco original, marcando estos clusters como malos en la FAT (del disco copia), por supuesto los clusters fisicamente
estaran bien.

Entonces al final tengo dos discos: un original con clusters malos marcados en la FAT y sobre el mismo disco y una copia con los mismos clusters marcados...pero solo en la FAT.

El programa al iniciar debe verificar los clusters directamente en el disco y no a travez de la FAT. Si en la verificacion de los clusters sucede un error indicaria que es el disco llave (por decirlo de alguna forma) y el sistema continua su trabajo.

La idea original de tener un archivo en mi disco y luego marcar el disco con una aguja, tratando de acertarle en los clusters involucrados con el archivo, me evitaba usar rutinas de bajo nivel para leer el disco, ya que el programa para poder inicar su trabajo, solo debia verificar la existencia de ese archivo en el disco, el cual como estaba dañado, en teoria, no podria ser copiado a otro disco. Por supuesto, verificar la existencia de ese archivo en el disco incluia comprobar algunos bytes en posiciones especificas dentro del archivo, de tal forma que esto era una segunda comprobacion de seguridad, es decir no solo se verifica que el archivo xxxxx.xxx este en el disco si no que tambien se verifique ciertos bytes en su interior. Todas estas operaciones se pueden hacer con los comandos de Delphi, tan es asi que lo pude lograr...pero tenia que usar un archivo tan grande como el disco (1.44 mb) y por que? pues
para estar seguro que al marcar cualquier posicion en la superficie del disco, le estaba atinando al archivo.

Bajo esta forma solo debo utilizar los comandos de acceso a archivos como
Seek, etc. Esta forma no funciona (al menos para lo que me piedieron hacer)por que en el mismo disco debo meter el EXE y depues se tiene que
guardar los datos generados con el mismo programa. Si primero copio la informacion (mi archivo EXE) y luego marco...puedo atinarle al EXE y por supuesto, todo el plan se malogra.

En cambio si en un disco limpio primero marco la superficie con la aguja y despues copia mi EXE, este se copiara en las partes no dañadas (claro esta que antes debo marcar estas posiciones en la FAT de tal forma que Windows no intente copiar el exe en esas posiciones), lo mismo sucedera con la informacion generada con el programa. Pero para hacer esto ya no me sirve los comandos de manejo de archivos de Delphi ya que este debe trabajar con archivos..Es por eso que ahora estoy mirando al Ensamblador y...tiene buena cara para este trabajo...Con esto trato de explicarte (y de paso a todos los amigos del foro) cual es mi plan...

Esperando hacerme entender
Atentamente Carlo