Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Fallo al Obtener datos particion

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Fallo al Obtener datos particion Responder citando

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
Mensaje    Asunto: Responder citando

¿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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Si, sirven para NT, y estoy usando nt :( Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.