Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular un CD

Saludos Amigos del Foro.

Hace algun tiempo hice una consulta de como poder leer sectores especificos de un Diskete, lo hice como parte de unas pruebas para mis alumnos.

Al final logre realizar mi proposito (despues de experimentar en varios disketes) el cual consistia en marcar fisicamente un diskete y luego, mediante ensamblador, lograr identificar que sectores habian sido afectados por la marca fisica.

Al usar ensamblador desde Delphi me pude enterar que Windows no dejaba acceder al anillo 0 en cual se permite el acceso directo al disco. Lo solucione con Pascal para Windows en el cual introduje mi codigo en Ensamblador y de esta manera tenia un EXE que podia verificar los sectores del Disco mediante Interrupciones(saltandose el anillo 0 de windows).Este EXE lo llamo desde la aplicación en Delphi y asunto solucionado.

Para quienes esten interesados del detalle (aunque creo que no hay nada de especial en lo que hice) les puedo explicar el detalle.

Ahora, estimados amigos, deseo hacer lo mismo pero marcando un CD y por supuesto, como ocurrio hace algun tiempo, me dirijo a Uds. para solicitar su valiosa ayuda y sugerencias para este su servidor y lego en Delphi. Mi consulta es:

Como puedo manipular el controlador del CD desde Delphi?

Si me dan alguna idea se los agradecere mucho y por supuesto al final les mostrare (por supuesto si desean) el resultado de mis experimentos

Mil gracias por su tiempo
Saludos Carlo
Responder Con Cita
  #2  
Antiguo 11-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Bueno... carlocf, con respecto a lo que dices no creo necesario llamar a las viejas interrupciones, puedes acceder con las APIs CreateFile y _lopen al dispositivo de almacenamiento (igual que con un CD).

Ahora, hablas de marcar... BAD sectors? osea que estas interactuando con el sistema de archivos del medio; si es asi, ya habras definido la forma de marcarlo considerando que es un cd-Rom ?

Si me equivoco, aclaranos.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 11-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por cHackAll Ver Mensaje
osea que estas interactuando con el sistema de archivos del medio; si es asi, ya habras definido la forma de marcarlo
mmmm.... ha dicho marcar físicamente, supongo que usará un clavo y arañará el CD

PD: Si os hace falta un martillo, ¡¡ yo tengo uno !!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 11-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular CD

Gracias por el Tiempo que se dan

Efectivamente mi intencion es marcar un CD. No usare un Clavo ni tampoco arañare el CD (las uñas las tengo cortas y esperar a que me crezcan no me servira) por supuesto tampoco usare un martillo (les comento que lo use y la verdad que los resultados no me convencen de pronto a Lepe le sirve marcar un Cd de esa forma aunque tambien imagino que deber marcar sus pertenencias usando el metodo del martillo) . Sabes cHackAll pienso utilizar una aguja fina calentada previamente para hacer una pequeña marca y luego tratar de ubicar donde se puso la marca.

Gracias por la ayuda saludos nuevamente
Atentamente Carlo
Responder Con Cita
  #5  
Antiguo 11-10-2008
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Carlof podrias compartir el codigo me mencionas para el marcado y lectura de Discos o dar una mayor esplicacion de como hacerlo

Gracias
Responder Con Cita
  #6  
Antiguo 11-10-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Con ubicar te refieres a saber que sectores machaco la marca o a situarla fisicamente sobre el disco (en milimetros)? Lo primero es sencillo, como ya te dijo chackall, Createfile y a leer. Lo segundo ya puede ser bastante mas complicado
Responder Con Cita
  #7  
Antiguo 11-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular CD

Nuevamente Saludos y mil gracias por el tiempo que se toman.

1.- Por supuesto que puedo explicarlo CrazySoft sin embargo quiero ver en que parte del Club puedo colocar esta explicacion que creo que seria como un pequeño manual.

2.- Estimado seoane mi intencion es marcar mediante una aguja fina y caliente a 5 mm del borde del agujero central, luego saber que sectores y pistas fueron malogradas.

Imagino que un CD totalmente limpio no tiene ni sectores ni pistas y que estas se crean al momento de grabar informacion en tal sentido, imagino tambien, que antes debo grabar informacion para crear pistas y sectores (claro que estoy asumiendo que un CD se organiza en pistas y sectores, si no es asi por favor corrijanme)

Ahora si hago una lectura del archivo desde el CD saltara un error al no poder leer la parte del CD que esta marcada. Sin embargo hace algun tiempo intente leer un CD que tenia partes malogradas y la verdad que la PC se colgo. Ahora mis dudas son:

a.- Usar CreateFile sobre un CD ya marcado en limpio, me permitira saber en que Sector y Pista no se pudo escribir?

b.- Y si primero grabo la información y luego marco el CD (tratando que la marca se coloque en las areas grabadas), lopen me dira en que sector y pista no se pudo leer?

Nuevamente mil gracias por el tiempo y por la ayuda prestada.
Atentamente
Carlo
Responder Con Cita
  #8  
Antiguo 12-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Aunque se adelantaron a preguntarlo, debo acotar algo que me inquieta en el sentido practico); tienes un CD (grabado o no) y digamos que podemos detectar el sector da­ñado y resulta ser el #666 .

Bien! tenemos el sector 666 dañado y el resto perfecto; de paso en el software mostramos un par de circulitos en representacion del CD y utilizando algo de trigonometria y tomando un angulo X marcamos con un "punto" el lugar donde se encuentra el "alfilerazo", el usuaro lo ve y todos felices

Ahora mi duda; cómo podemos saber comparando visualmente dónde está dicho sector dañado? como sabemos (girando X grados el CD) dónde esta el "punto" que vemos en la pantalla???

Paisano CrazySoft: aqui va un codigo que puedes(n) utilizar para dicho caso;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 
var
 hDevice, Dummy, Sectors, Sector: Cardinal;
 Buffer: array [0..$FFFF] of Byte;
 Geometry: record
  Cylinders: Int64;
  MediaType,
  TracksPerCylinder,
  SectorsPerTrack,
  BytesPerSector: Cardinal;
 end;
 
begin
 SetErrorMode(SEM_FAILCRITICALERRORS);
 hDevice := CreateFile('\\.\g:', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> INVALID_HANDLE_VALUE then
  begin
   DeviceIoControl(hDevice, $70000{IOCTL_DISK_GET_DRIVE_GEOMETRY}, nil, 0, @Geometry, SizeOf(Geometry), Dummy, nil);
   Sectors := Geometry.SectorsPerTrack * Geometry.TracksPerCylinder * Geometry.Cylinders;
   for Sector := 0 to Sectors - 1 do
    begin
     Label1.Caption := 'Leyendo el sector #' + IntToStr(Sector) + '...';
     Application.ProcessMessages; // Use a thread !!!
     if not ReadFile(hDevice, Buffer, Geometry.BytesPerSector, Dummy, nil) then
      ShowMessage('El sector #' + IntToStr(Sector) + ' esta dañado !');
    end;
   CloseHandle(hDevice);
  end;
end;

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #9  
Antiguo 12-10-2008
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias cHackAll
Responder Con Cita
  #10  
Antiguo 12-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular CD

Saludos y gracias por su tiempo

De acuerdo a mi compromiso y tambien con la intencion de mostrar a CrazySoft como hice mi trabajo de marcado de un Disco les detallo el trabajo

Hace algun tiempo hice una especie de Disco de seguridad en base al marcado fisico de un Diskete. Esta demas decir que no fui ni el primero ni el ultimo en hacer este trabajo.

1.- Utilizo un Diskete formateado y por supuesto en el que estoy seguro de que no existen Sectores malogrados. Cuando empece mis pruebas utilizaba Norton Utilities, opción Speed Disk (les comento que bajo Windows 98, Speed Disk mostraba un mapeo del disco en el que se podia ver como cuadros negros los sectores malogrados y al darle un click te informaba del nº de sector malogrado. Sin embargo para la version XP la misma herramienta te sigue mostrando un mapeo del disco e incluso te muestra los sectores malogrados pero al darle click ya no hay informacion del nº de sector).

2.- Utilizando una aguja fina punzo la superficie del diskete a una distancia de 10 mm medido desde el borde de la abertura. Un dibujo te ayudara mejor:

3.- Una vez marcado el disco debemos buscar que pistas y sectores fueron malogrados. Te recomiendo que perfores el disco de manera leve de tal forma que la cantidad de sectores y pistas no sea muy grande. En las pruebas que hice observe lo siguiente: Si no llego a perforar el disco, despues de un tiempo, la superfice plastica retoma su forma original y los secores malogrados ya no son detectados como tal.

4.- Como la superfice plastica con el tiempo tiende a retomar su forma original no busco de inmediato los sectores malogrados, lo hago despues de un par de dias cuando creo que la superficie, alrededor del punto perforado, ya recupero su forma.

5.- En este punto uso el Norton Disk Doctor para hacer una verificacion de superficie. El NDD marcara en la FAT los sectores malogrados.En Windows 98 usaba Speed Disk para ver el Nº de Sectores afectados, pero en Windows XP ya no puedo asi que hice un programa en ensamblador que muestra la pista y los sectores malogrados. Pero gracias a cHackAll ya tienes un codigo (citado mas arriba) de como podemos usar Delphi para mostrar BAD sectors. Usa este codigo para tener un listado de Sectores malogrados.

Última edición por carlocf fecha: 01-11-2008 a las 08:48:09.
Responder Con Cita
  #11  
Antiguo 12-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular CD

6.- Teniendo el listado de sectores y pistas malogrados solo debemos escoger cual de ellos usaremos para identificar a nuestro diskete. Desde un programa debes buscar en el disco el sector y pista que hayas elegido y comprobar que estos sectores se encuentran malogrados, si es asi podriamos creer que tenemos el disco correcto.

7.- Sin embargo si pensamos en el asunto un poco mas, basta encontrar otro disco que por coincidencia tenga un rango de sectores malogrados entre los cuales se encuentra los que se han seleccionado y se tomaria a este disco como nuestro disco. Entonces y gracias al manual de un amigo Angel Moreno 'Microscope-32E' donde explica este metodo de seguridad (despues de completar mis pruebas y cuando ya tenia todo el trabajo completo me contacte con Angel Moreno y me brindo su manual, debo decir que si lo hubiese encontrado antes me habria ahorrado mucho tiempo de trabajo). Angel indica que una combinacion de sectores malogrados y buenos (que se encuentren contiguos) ayuda mas que si solo se usa sectores malogrados. Les paso el correo de Angel Moreno para ver si nuestro estimado moderador marcoszorrilla puede contactarse con el y de pronto podamos tener su esplendido manual al alcance de todos. El correo es a.moreno@quipusoft.com

8.- El codigo ASM que uso es el siguiente:

Código:
Asm
  {Guardar los registros}
      push DI
      push AX
      push DX
      push CX
      Mov DI,2 {Iniciar el Contador}
      Xor AX,AX {Poner a 0 el registro AX}
    bBucle:
      Mov AH,4  {Colocar el indicador de Verificar Sectores}
      Mov DL,bDLUnidad
      Mov DH,bDHCara
      Mov CH,bCHPista
      Mov CL,bCLSector
      Mov AL,bALNSectores
      Int 13h
      Jnc bOk
      Jmp bErr
    bOk:
      Mov AH,0 {Restaurando el diskette}
      Int 13h {Llamar a la Int 13}
      Dec DI  {Decrementamos el contador}
      Cmp DI,0 {Compramos si es igual a cero}
      Jne bBucle {Si no es igual saltamos a bBucle}
      Jmp bErr {Si es igual a 0 saltamos a bErr}
    bErr:
      Mov ResAH,AH
      pop CX  {Restauramos los registros}
      pop DX
      pop AX
      pop DI
    End;

Última edición por carlocf fecha: 12-10-2008 a las 15:02:06.
Responder Con Cita
  #12  
Antiguo 12-10-2008
Avatar de carlocf
carlocf carlocf is offline
Miembro
 
Registrado: oct 2005
Posts: 35
Poder: 0
carlocf Va por buen camino
Manipular CD

9.- Debo comentarles (aun cuando ya lo hice anteriormente) que al usar ASM en delphi no podia acceder a las INT 13, despues de averiguar un poco por internet me entere que Windows se maneja por anillos (rings) poniendo en el anillo mas interno (ring 0) la manipulacion de las INT, pero para llegar al anillo 0 es mas complicado. Asi que en base a prueba y error descubri que Pascal para DOS en Win XP dejaba acceder a la INT13 y no falto mucho para hacer la prueba con Pascal para Windows en la que tambien es posible manejar INT. Asi que tengo el codigo anterior insertado dentro de un programa en Pascal para windows, dentro del cual puedo recuperar los valores manipulados por el codigo ASM y colocarlos en archivos de disco. Este programa (EXE) lo ejecuto desde Delphi, una vez que termina, el codigo Delphi lee el contenido de los archivos (el contenido de cada archivo esta encriptado) y de esta manera puedo manejar el resultado del codigo ASM desde Delphi. Es decir hago un manejo indirecto.

Como ven esta es la forma en que solucione mi problema. Pero Uds. amigos del foro que son mas inteligentes que yo, podran hacerlo mejor

Espero no haberlos aburrido con esta chachara (platica aburrida) y que les sirva de algo.

Un saludo
Carlo
Responder Con Cita
  #13  
Antiguo 14-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
amigo hackall el codigo que mostraste para indentificar sectores dañado en un disco esta buenisimo funciona a la perfecion solo ahi un incombeniente y es el siguiente como elegir la unidada a comprobar pues en el ejemplo que pusiste esta la unidad g: como predeterminada y como sabra no tadas las pc tienen las misma unidades
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Manipular Video Carlos Arevalo Varios 4 21-10-2006 16:00:43
manipular botones fartycl Varios 3 21-06-2006 22:03:31
Manipular Paradox Coco_jac Conexión con bases de datos 5 09-11-2005 16:15:00
DBLookupComboBox manipular Sayuri Conexión con bases de datos 3 26-07-2005 09:17:02
Manipular un Reporte noir Impresión 0 26-05-2003 20:36:36


La franja horaria es GMT +2. Ahora son las 11:08:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi