IOCTL IOCTL_REDIR_QUERY_PATH , How to unreference a UNC on ....? RRS feed

  • Question

  • Hello,

    I ask the question in English and in French.

    In english :

    In the MUP, at each IOCTL function IOCTL_REDIR_QUERY_PATH, Windows
    reference the UNC link (eg. \\test\l1) by data receive 'QUERY_PATH_RESPONSE' if
    it returns STATUS_SUCCESS.

    But how to do the opposite?
    Do That is how deference or purge the UNC ?
    Do That is, the OS recalls the IOCTL function IOCTL_REDIR_QUERY_PATH ?
    because he is called only once

    I developed a kernel MUP UNC service to mount virtual disk filesystem on a UNC Network.
    AND also I develop a MUP UNC kernel service to mount rawsystem virtual disk on a UNC Network.

    When I mount my filesystem disk (Driver 'A') on a UNC (eg \\test\l1) it works good!!!
    I unmount my filesystem disk and mount a rawsystem disk (Driver 'B') on the same UNC (\\test\l1).
    It does not work, and I took a long time to find the problem but not resolved:
     when I open the UNC '\\ test \ l1' Windows does not send the famous ioctl function IOCTL_REDIR_QUERY_PATH, consequence
    it is the DeviceObject MUP (Driver 'A') of my driver filesystem which is always called (AND NOT THAT OF THE DRIVER RAWSYSTEM (Driver 'B')).
    It is that of the driver 'A' which is always called instead Driver 'B', consequence the function IRP_MJ_CREATE of the driver FileSystem
    which is called returns STATUS_ACCESS_DENIED because the UNC (\\test\l1) of the driver 'A' is no longer referenced because I had to unmount the filesystem disk.
    the UNC address \\test\l1 is referenced to the driver 'B'.

    How to purge the MUP?

    For information :
    My disk driver DiskSystem (Driver 'A') has its own MUP device.
    My disk driver RawSystem (Driver 'B') has its own MUP device.
    Also there are 2 providers MUP (One for Driver 'A' and one for Driver 'B')

    Driver 'A' -> driver disk filesystem
    Driver 'B' -> driver disk rawsystem.

    Thank you.

    In French version :

    Dans les MUP ,à chaque fonction IOCTL IOCTL_REDIR_QUERY_PATH, Windows
    référence le lien UNC (eg. \\test\l1) par  data receive 'QUERY_PATH_RESPONSE' si
    il renvoie STATUS_SUCCESS.

    Mais comment faire l'inverse ?
    C'est à dire le deferencer ou purger les UNC. C'est à dire que the OS rappelle la fonction IOCTL IOCTL_REDIR_QUERY_PATH,
    car il est appellé qu'une seule fois.

    J'ai développer un service kernel MUP UNC pour monter des disque virtuelle filesystem sur un UNC Network.
    ET aussi j'ai developper un service kernel MUP UNC pour monter des disque virtuelle rawsystem sur un UNC Network.

    Quand je monte mon disque filesystem (Driver 'A') sur un UNC (ex. \\test\l1) ca marche !!!
    Je démonte mon disque filesystem et je monte un disque rawsystem (Driver 'B') sur le même UNC (\\test\l1).
    Ca ne marche pas , et j'ai mis longtemps à trouver le probléme mais pas résolut :
     quand j'ouvre l'UNC '\\test\l1' Windows ne n'envoie pas le fameux fonction ioctl IOCTL_REDIR_QUERY_PATH ,conséquence
    c'est le DeviceObject MUP (Driver 'A') de mon driver filesystem qui est toujours appellé (ET NON PAS CELLE DU DRIVER RAWSYSTEM (Driver 'B')).
    C'est celui du driver 'A' qui est appellé , conséquence  la fonction IRP_MJ_CREATE du driver FileSystem
    qui est appellé retourne STATUS_ACCESS_DENIED car l'UNC (\\test\l1) du driver 'A' n'est plus référencer car j'avais démonter le disque filesystem.
    l'adresse UNC \\test\l1 est référencer au driver 'B'.

    Comment purger le MUP ?

    Pour information :
    Le driver disk FileSystem (Driver 'A') comporte son propre device MUP.
    Le driver disk RawSystem (Driver 'B') comporte son propre device MUP.
    Aussi il y a 2 providers MUP (Pour Driver 'A' et pour Driver 'B')

    Driver 'A' -> driver disk filesystem
    Driver 'B' -> driver disk rawsystem.


    Friday, August 3, 2018 3:37 PM