7
votes

Comment ouvrir des disques sous Windows et lire des données à bas niveau?

Je connais sous Linux il est aussi simple que / dev / sda mais dans Windows comment ouvrez-vous un disque et commencez à lire des données au niveau bas?

dans Python J'ai essayé: P>

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: 'K:'


1 commentaires

Je pense que je dois utiliser l'extension Win32 Win32file? Est-ce que quelqu'un sait?


3 Réponses :


11
votes

de http://support.microsoft.com/kb/100027

ouvrir un disque dur physique pour accès direct sur disque (E / S RAW) dans un Application basée sur Win32, utilisez un périphérique Nom du formulaire xxx

où n est 0, 1, 2, etc., représentant chacun des physiques conduit dans le système.

ouvrir un lecteur logique, accès direct est de la forme xxx

où x: est un Lettre de partition de disque dur, disquette lecteur de disque ou lecteur de CD-ROM.


4 commentaires

Comment savez-vous quel entraînement est lequel?


Je devinerais que le gestionnaire de disques est correct, mais je double-vérifier avant de faire quelque chose de destructeur :-)


Pour ce faire avec Python: blog.lifeeth.in/ 2011/03 / lecture-disks brut-with-python.html


Quels sont les autres paramètres à Createfile ?



2
votes

N'oubliez pas que tous les objets sous Windows et autres systèmes d'exploitation sont des fichiers. Pour ouvrir et lire 16 octets de données de lecteur E: Utilisez le code ci-dessous:

# Open a Disk in binary format read only 16 bytes
file = "\\\\.\\E:"
with open(file,'rb') as f:
    print("Disk Open")
    data = f.read(16)
    # Convert the binary data to upper case hex ascii code
    hex_data = " ".join("{:02X}".format(c) for c in data)
    print(hex_data)


0 commentaires

0
votes

Tous deux travaillés pour moi. Pour accéder à la partition C: ou à l'ensemble du lecteur, des privilèges administrateurs sont nécessaires. Voici un exemple de remplacement pour OPEN ():

def open_physical_drive(
    number,
    mode="rb",
    buffering=-1,
    encoding=None,
    errors=None,
    newline=None,
    closefd=True,
    opener=None,
):
    """
    Opens a physical drive in read binary mode by default
    The numbering starts with 0
    """
    return open(
        fr"\\.\PhysicalDrive{number}",
        mode,
        buffering,
        encoding,
        errors,
        newline,
        closefd,
        opener,
    )


def open_windows_partition(
    letter,
    mode="rb",
    buffering=-1,
    encoding=None,
    errors=None,
    newline=None,
    closefd=True,
    opener=None,
):
    """
    Opens a partition of a windows drive letter in read binary mode by default
    """
    return open(
        fr"\\.\{letter}:", mode, buffering, encoding, errors, newline, closefd, opener
    )


# first 16 bytes from partition C:
# on Linux it's like /dev/sda1
with open_windows_partition("C") as drive_c:
    print(drive_c.read(16))


# first 16 bytes of first drive
# on Linux it's like /dev/sda
with open_physical_drive(0) as drive_0:
    print(drive_0.read(16))


0 commentaires