 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Yo Invitado
|
Publicado: Vie 02 Ene, 2004 9:59 pm Asunto: Fallo al Obtener datos particion |
|
|
Hola buenas tardes
he escrito el siguiente código:
unid = CreateFile("\\\\.\\PhysicalDrive0",0,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,NULL);
int bResult;
DWORD junk;
OVERLAPPED ov;
DRIVE_LAYOUT_INFORMATION date;
bResult = (DeviceIoControl(unid,IOCTL_DISK_GET_DRIVE_LAYOUT,NULL,0, &date, sizeof(date),&junk, &ov));
La primea parte de encontrar el handle, lo hace correctamente ,pero despues a la hora de obtener los datos, me da error (acceso denegado)
he consultado mucho el MSDN,pero no entiendo que falla; si alguien me puede ayudar por favor...
grácias |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Sab 03 Ene, 2004 8:43 pm Asunto: |
|
|
¿dice la documentación para que SO sirve el código? Acabo de leer que no es lo mismo si ejecutas en Win9x.
En otro caso, tienes derechos de Administador en la pc? |
|
| Volver arriba |
|
 |
Yo Invitado
|
Publicado: Dom 04 Ene, 2004 2:13 am Asunto: Si, sirven para NT, y estoy usando nt :( |
|
|
Sí, estas Apis; En concreto CreateFile sirve para asignar un handle entre otras cosas a un disco físico; pero sólo se puede asignar un disco físico en NT, que es en lo que estoy trabajando. Entonces el handle lo obtiene correctamten ya que he hecho pruebas,pero luego la funcion retorna error (acceso denegado) Sí alguien ha trabajado con esto que me ayude por favor !es la base de un proyecto que estoy acciendo, y todavia no es que tenga mucha sulutra con las APIS (sólo lhas he usado un par de veces)
Grácias y Feliz año a todos! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 06 Ene, 2004 4:48 am Asunto: |
|
|
Te has olvidado de especificar el tipo de acceso en el segundo parámetro. En este caso GENERIC_READ. Un ejemplo:
| Código: | // Añadimos: #include <Winioctl.h>
DRIVE_LAYOUT_INFORMATION* dli;
char buffer[1024];
DWORD br;
HANDLE unid = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ,
FILE_SHARE_WRITE, 0, OPEN_EXISTING,
FILE_ATTRIBUTE_SYSTEM, 0);
if (unid != INVALID_HANDLE_VALUE)
{
BOOL ret = DeviceIoControl(unid, IOCTL_DISK_GET_DRIVE_LAYOUT,
0, 0, &buffer, sizeof(buffer), &br, 0);
if (ret)
{
String str;
dli = reinterpret_cast<PDRIVE_LAYOUT_INFORMATION>(buffer);
str.sprintf("Número de particiones: %d\n\n", dli->PartitionCount);
for (unsigned i=0; i < dli->PartitionCount; i++)
{
String linea;
linea.sprintf("Part.nº: %d\n\tTipo: 0x%04x\n\tTamaño: %Lu\n",
dli->PartitionEntry[i].PartitionNumber,
dli->PartitionEntry[i].PartitionType,
dli->PartitionEntry[i].PartitionLength.QuadPart);
str += linea;
}
ShowMessage(str);
}
else
ShowMessage(String("Error 'DeviceIoControl' :") + GetLastError());
CloseHandle(unid);
}
else
ShowMessage(String("Error 'CreateFile' :") + GetLastError()); |
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|