Tanto esta como la anterior son dudas basicas, tenes que leer la documentacion y comprender como funcionan Windows y C/C++. Tus programas son de modo Usuario y tus
drivers (modulos de modo Kernel) de modo Kernel (los anillos pueden variar de una plataforma a otra).
En el segundo caso no tiene ningun sentido llamar a RtlInitUnicodeString - es redundante ya que RtlAnsiStringToUnicodeString reservara memoria y la asignara a al campo Buffer - y es un error conceptual si tu cadena es ANSI (deberias usar Unicode siempre).
Directo del WDK (ex DDK):
Using Files In A Driver
The Microsoft Windows executive represents files by file objects, which are executive objects that are managed by the object manager. (Directories are also represented by file objects.)
Kernel-mode components refer to a file by its object name, which is \DosDevices concatenated to the file's full path. (On Microsoft Windows 2000 and later versions of the operating system, \?? is equivalent to \DosDevices.) For example, the object name of the C:\WINDOWS\example.txt file is \DosDevices\C:\WINDOWS\example.txt. You use the object name to open a handle to a file. For more information about object names, see Object Names.
http://msdn2.microsoft.com/en-us/library/aa489615.aspx