Bonjour,
Je suis entrain de me mettre au développement d'un driver en utilisant la DDK et j'ai constaté qu'il y a deux méthodes pour enregistrer un périphérique nommé:
- Sans lien symbolique
- Avec lien symbolique
Faisant le fainant, je vais au plus court et je choisis celle sans lien symbolique:
Je n'ai pas d'erreur lors de l'exécution de ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #define NT_DEVICE_NAME L"\\Device\\MyDevice" NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ) { NTSTATUS ntStatus; UNICODE_STRING deviceNameUnicodeString; RtlInitUnicodeString(&deviceNameUnicodeString, NT_DEVICE_NAME); DbgPrint("Creating device...\n"); ntStatus = IoCreateDevice(theDriverObject, 0, &deviceNameUnicodeString, FILE_DEVICE_UNKNOWN, 0, FALSE, &g_DriverDevice); if(ntStatus != STATUS_SUCCESS) { DbgPrint("Error to create device name for the driver: "); if(ntStatus == STATUS_INSUFFICIENT_RESOURCES) { DbgPrint("STATUS_INSUFFICIENT_RESOURCES\n"); } else if(ntStatus == STATUS_OBJECT_NAME_EXISTS) { DbgPrint("STATUS_OBJECT_NAME_EXISTS\n"); } else if(ntStatus == STATUS_OBJECT_NAME_COLLISION) { DbgPrint("STATUS_OBJECT_NAME_COLLISION\n"); } else DbgPrint("UNKNOWN\n"); return ntStatus; } else { DbgPrint("Without symbolic link: Driver loaded!\n"); } .... }
Je charge ensuite mon driver par le biais du logiciel InstDriver et j'exécute un code en mode utilisateur pour récupérer un handle sur mon périphérique nommé:
Et là malheureusement, je n'arrive pas à récupérer un handle sur le device...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int main() { HANDLE hDevice = CreateFile("\\\\Device\\MyDevice", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hDevice == ((HANDLE)-1) ) return FALSE; return 0; }
Sauriez vous pourquoi?
Par contre, si j'utilise la méthode avec lien symbolique, je récupère bien mon HANDLE.
Alors je me demande si cette dernière est à utiliser par défaut?
Merci.
Nicolas
Partager