PDA

View Full Version : [C & MS-DOS] Controllare il cassettino cd-rom


nec-3500
05-07-2007, 17:26
vorrei controllare il cassettino cd-rom da un programma che sto scrivendo in c, credo che il modo più semplice sia quello di mettere un if che mi controlli una condizione al cui verificarsi esegua una chiamata di sistema tipo sytem ("____") ma cosa inserire nella chiamata di sitema??
Oppure altro metodo che ho più che altro immaginato è di usare una funzione di libreria che presumo esista sicuramente, ma che non ho idea di dove trovare e soprattutto di come usare....

Ringrazio anticipatamente tutti coloro che proveranno a risolvermi tale dilemma, grazie!!

Naufr4g0
05-07-2007, 18:29
ahahahah!! Vuoi forse fare qualche programmino virus?! ;)
Non ti aiutiamo! eheh

wingman87
05-07-2007, 18:34
Cmq penso che tu possa trovare qualcosa tra le api di windows (sempre che sei in windows). Mi sembra comunque che questo argomeno sia già stato trattato, hai provato a fare una ricerca?

nec-3500
05-07-2007, 21:02
non cerco di fare un virus, solo un programma che permetta di eseguire controlli sull'hardware. non conosco l'argomento api, ma se mi deste qualche dritta potrei imparare e o andare ad informarmi, allo stato attuale delle cose non saprei proprio cosa cercare, sono in windows, ho dimenticato di scriverlo ma lo dico adesso, ed ho provato a cercare in rete in generale e non ho trovato nulla, nel forum ho sfogliato un po di pagine senza risultati, la ricerca automatica mi porta risultati poco pertinenti......

nec-3500
05-07-2007, 21:09
grazie a wikipedia adesso so cosa siano le api di windows, le ho anche trovate, adesso do un'occhiata, cmq rimango curioso di sapere come fare senza le api, ci sarà cmq un metodo alternativo....

credo di aver trovato questo:
http://msdn2.microsoft.com/en-us/library/aa363406.aspx

ma forse va meglio questo:
http://msdn2.microsoft.com/en-us/library/aa363416.aspx

ditemi se sono sulla buona strada....

recoil
05-07-2007, 22:32
io non ho idea di come si faccia senza usare le API o una chiamata ioctl
se dovessi fare a meno di quelle chiamate penso che darei un'occhiata al driver del cd-rom (in linux) per vedere il comportamento quando viene chiamata la ioctl per fare eject
ora sono in windows e non ho qui i sorgenti, ma con un po' di pazienza trovi tutto

nec-3500
05-07-2007, 23:29
facile a dirsi meno che a farsi se non si ha idea di dove trovarli..... sorgenti poi di cosa?? dei driver?? ma sono quelli standard di windows della microsoft che io sappia, quindi dove posso reperirli???

recoil
06-07-2007, 08:04
non ho idea di dove trovare sorgenti per driver sul sistema operativo di M$
io con una rapida ricerca ho guardato in linux stamattina e ho visto che, ad esempio, nei CD Mitsumi se vuoi espellere il cassetto devi scrivere 0xfe nel registro (è una porta di I/O) del cd-rom, se voglio sapere l'indirizzo di tale porta mi basta cercare nel driver e trovo

tuttavia credo che a te bastino le API

andbin
06-07-2007, 09:07
vorrei controllare il cassettino cd-rom da un programma che sto scrivendo in c<qui> (http://www.hwupgrade.it/forum/showpost.php?p=13451846&postcount=6) avevo postato un esempio per aprire lo sportello del lettore CD utilizzando le API MCI (Media Control Interface).

Se invece vuoi usare le IOCTL, ecco un esempio:
#define STRICT
#include <windows.h>
#include <stdio.h>

int main (void)
{
HANDLE hDevice;
BOOL bRet;
DWORD dwDummy;

hDevice = CreateFile ("\\\\.\\D:", GENERIC_READ, FILE_SHARE_WRITE, NULL,
OPEN_EXISTING, 0, NULL);

if (hDevice != INVALID_HANDLE_VALUE)
{
bRet = DeviceIoControl (hDevice, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0,
NULL, 0, &dwDummy, NULL);

if (!bRet)
printf ("DeviceIoControl, errore %lu\n", GetLastError ());

CloseHandle (hDevice);
}
else
printf ("CreateFile, errore %lu\n", GetLastError ());

return 0;
}

nec-3500
12-07-2007, 16:07
grazie mille ragazzi, non saprei come fare senza questo magnifico forum!! sempre gentilissimi e preparatissimi!!