View Full Version : [C (ma anche PHP)] TOC e MBR...
Xalexalex
01-02-2006, 13:36
Ave a tutti o sapienti...
Volevo sapere come si può in linguaggio C (e eventualmente in PHP) accedere al MBR di un disco, o al TOC di un CD-ROM.
(Tra parentesi.. TOC e MBR sono la stessa cosa + o -??? o no?)
Sperando di non aver detto una cacaus, attendo risposte...
Grazie in anticipo...
Alex
Xalexalex
01-02-2006, 20:34
up! nessuno???
Ave a tutti o sapienti...
Volevo sapere come si può in linguaggio C (e eventualmente in PHP) accedere al MBR di un disco, o al TOC di un CD-ROM.
(Tra parentesi.. TOC e MBR sono la stessa cosa + o -??? o no?)
Sperando di non aver detto una cacaus, attendo risposte...
Grazie in anticipo...
Alex
Non capisco cosa intendi con "accedere" :confused:
Da qualche parte avevo trovato un piccolo howto per scrivere sul mbr, ovvero per metterci sopra del codice scritto in assembly, ma mi sa che non e' quello che cerchi.
Ave a tutti o sapienti...
Volevo sapere come si può in linguaggio C (e eventualmente in PHP) accedere al MBR di un disco, o al TOC di un CD-ROM.
(Tra parentesi.. TOC e MBR sono la stessa cosa + o -??? o no?)
Sperando di non aver detto una cacaus, attendo risposte...
Intanto TOC e MBR sono due cose abbastanza diverse.
MBR = Master Boot Record, è il primo settore fisico (512 bytes) di un hard-disk, che contiene una sequenza di codice in linguaggio assembly per avviare il sistema operativo da una partizione e contiene inoltre una tabella delle partizioni di 4 elementi.
Vedi anche: Master boot record - Wikipedia (http://en.wikipedia.org/wiki/Master_boot_record)
TOC = Table Of Contents, è una area di un disco ottico (CD-ROM, CD audio, ecc...) che contiene le informazioni sul layout del disco (numero di tracce, durata, ecc....).
Vedi anche: Optical disc authoring - Wikipedia (http://en.wikipedia.org/wiki/Optical_disc_authoring).
Leggere queste informazioni è possibile ma è necessario usare funzioni specifiche e altamente system-dependent. Cioè si devono usare delle funzioni non portabili e specifiche in base al sistema operativo su cui si opera.
Sui sistemi Windows è abbastanza semplice leggere il MBR di un hard-disk. Ecco il codice di una applicazione Win32 console:
#define STRICT
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
DWORD ReadMbrSector (INT iDrive, LPBYTE lpBufSector)
{
DWORD dwRet = ERROR_SUCCESS;
TCHAR szDevName[32];
HANDLE hDevice;
DWORD dwPos, dwRead;
wsprintf (szDevName, _T("\\\\.\\PHYSICALDRIVE%d"), iDrive);
hDevice = CreateFile (szDevName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
dwPos = SetFilePointer (hDevice, 0, NULL, FILE_BEGIN);
if (dwPos != INVALID_SET_FILE_POINTER)
{
if (ReadFile (hDevice, lpBufSector, 512, &dwRead, NULL) == FALSE)
dwRet = GetLastError ();
}
else
dwRet = GetLastError ();
CloseHandle (hDevice);
}
else
dwRet = GetLastError ();
return dwRet;
}
int _tmain (int argc, TCHAR *argv[])
{
BYTE bMbrSector[512];
DWORD dwRet;
dwRet = ReadMbrSector (0, bMbrSector);
if (dwRet == ERROR_SUCCESS)
{
/* ... MBR letto ... */
}
else
_tprintf (_T("Errore %ld\n"), dwRet);
return 0;
}
NOTA BENE: Questo codice funziona solo su sistemi Windows NT based (Windows NT,2000,XP,2003) e, cosa molto importante, è necessario avere i privilegi di amministratore, altrimenti l'apertura del device fallisce con errore ERROR_ACCESS_DENIED. Questo per ovvi motivi di sicurezza. ;)
DanieleC88
03-02-2006, 16:36
Alessandro::Xalexalex, come speri di accedere al MBR di un disco da PHP? :D
E poi, per che scopo? :mbe:
Xalexalex
03-02-2006, 17:37
Il mio progetto? Formattazione (rapida :D ) di tutti i dischi fissi del mondo tramite web altro che virus... :eek:
Progettino ambizioso...Ovviamente scherzo...
Scherzi a parte, visto che uso su winzozz il PHP anche da linea di comando, volevo sapere se c'era modo.
Cmq grazie a andbin x la risposta.
Scherzi a parte, visto che uso su winzozz il PHP anche da linea di comando, volevo sapere se c'era modo.
Comunque, per essere precisi, accedere da PHP al settore MBR non è proprio impossibile. Molte funzioni del PHP sono gestite come delle "estensioni". Cioè a parte l'interprete vero proprio del linguaggio e le sue funzioni "built-in", il PHP è composto in gran parte da librerie dinamiche esterne che estendono il PHP con nuove funzionalità.
Quindi basterebbe scrivere una estensione e configurarla all'interno del PHP per avere ad esempio una nuova funzione chiamata read_mbr_sector(). ;)
Il limite/problema è semmai, come ho detto, che per accedere a quel livello di informazioni è necessario essere amministratore ma credo che si possa aggirare in un modo o nell'altro.
Purtroppo non conosco (e non ho mai avuto modo di vedere) nei dettagli come si estende il PHP. In passato ho avuto modo di fare qualcosa a livello di estensioni per il TCL e credo che sia una cosa molto simile.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.