Newsgroup: it.comp.os.dos
Titolo: Sector boot

Non so se sono Ot qui, cmq ci provo
uso djgpp e vorrei poter leggere e scrivere sul sector boot sia del floppy
disk sia dell'hd
sapete come fare o dove trovare qualche esempio ???
In c ovviamente per il dos (questo era ovvio , forse no ????)
grazie
Reartu

reartu ha scritto:

absread(disco,NR,0,buff)
Questo e` il main del mio boot virus capture scritto nel 1996 in borland C:
int main (void)
{
   char ch[2];
   /* accesso ai file */
   _fmode = O_BINARY;
   /* allocazione memoria per NR tracce */
   buff=malloc(512*NR);
   /* assegnazione nome */
   strcpy(virname,"NO_VIRUS.BVC");
   /* caricamento BVC di default */
   {
      int h;
      h=open(virname,O_RDONLY);
      if (h==-1) { printf("Errore nella lettura di NO_VIRUS.BVC\n");
                   printf("Premi un tasto");
                   strcpy(virname,"EMPTYBUF.BVC");
                   getch(); }
      read(h,buff,512*NR);
      close(h);
   }
   do
   {
      window(1,1,80,24);
      clrscr();
      printf("Boot Virus Capture V0.3 Beta di Mirco Miranda (07/11/96)\n\n");
      window(45,5,70,15);
      cprintf("File : %s\n\r",virname);
      window(1,1,80,24);
      gotoxy(1,3);
      printf("Menu`:\n\n");
      printf("  1   - Drive %c\n",disco+'A');
      printf("  2   - Lettura   Boot\n");
      printf("  3   - Scrittura Boot\n\n");
      printf("  C   - Carica file BVC\n");
      printf("  S   - Salva  file BVC\n");
      printf("\n  ESC - Uscita\n");
      printf("\nScelta : ");
      ch[0] = getch();
      strcpy(ch,strlwr(ch));
      switch (ch[0])
      {
         case '1': disco = 1 - disco; break;  /* cambio floppy */
         case '2':
                   /* lettura boot */
                   window(45,7,70,15);
                   cprintf("Lettura...");
                   if (absread(disco,NR,0,buff)==-1)
                      { cprintf("Errore !"); getch(); }
                   break;
         case '3':
                   /* scrittura boot */
                   window(45,7,70,15);
                   cprintf("Scrittura...");
                   if (abswrite(disco,NR,0,buff)==-1)
                      { cprintf("Errore !"); getch(); }
                   break;
         case 's':
                  /* salvataggio virus */
                  {
                   int h,tmp;
                   window(45,7,70,15);
                   cprintf("Nome : ");
                   gets(virname);
                     for (tmp=strlen(virname);tmp>0;tmp--)
                          if (virname[tmp]=='.')
                             { virname[tmp] = '\0'; break; }
                   if (strlen(virname)>8) virname[8]='\0';
                   strcat(virname,".BVC");
                   strcpy(virname,strupr(virname));
                   if (!access(virname,0))
                      { cprintf("\n\rSovrascrivo (S/N)? : ");
                        if(getche()=='n') break; }
                   h=creat(virname,S_IWRITE);
                   if (h==-1) { cprintf("\r\nErrore !"); getch(); }
                   write(h,buff,512*NR);
                   close(h);
                  }
                   break;
         case 'c' :
              {
                  int h;
                  /* se non vi sono file BVC torna al menu` */
                  if (!seleziona()) break;
                  /* lettura virus da disco */
                  h=open(virname,O_RDONLY);
                  if (h==-1) { printf("Errore !"); getch(); }
                  read(h,buff,512*NR);
                  close(h);
              }   break;
      }
   } while (ch[0]!=ESC);
   return(0);
}
--
ciao, Mirco.
ICQ number   : 51640305
(get ICQ : 
http://www.mirabilis.com
)