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:
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 n'ai pas d'erreur lors de l'exécution de ce code.

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é:
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;
}
Et là malheureusement, je n'arrive pas à récupérer un handle sur le device...
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