Accueil
 

Les Outils

  • DebugView
  • IrpTracker
  • Kernel Debugger (kd)
  • Windbg (!error C000003A dans la commande pour avoir la description de l’erreur)

Network Filesystem Redirector Drivers

Network Provider (dll)

Introduction

Le NP assure la gestion du voisinage reseau sous windows, il s’occupe aussi du mappage des lecteurs reseau. Il communique avec le NR grace a des ioctl. C’est lui qui indique au drivers qu’il faut se connecter a une resource reseau.

Adresse reel:

  • \Device\DriversName\;C:\server\share pour un lecteur reseau mappe.
  • \Device\FSDriver\S:\user@host\foo\bar
  • \Device\NullMiniRdr\;0:\nulsvr\share (addresse de test du minirdr (nulmrx))

Fonction

  • NPGetCaps : enumere les capacites du drivers, pour WNNC_ENUMERATION:
    • WNNC_ENUM_GLOBAL gestion du voisinage reseau (eumeration globales des ressources)
    • WNNC_ENUM_LOCAL gestion des resources connectes
    • WNNC_ENUM_CONTEXT gestion des utilisateurs (login/pass pour un reseau)
  • NPOpenEnum, NPEnumResource : enumerent les resources disponible sur le reseau (ordinateur, partage, imprimante, etc), dans le cas d’une visite du reseau par le voisinage reseau localname doit etre null, et pour pouvoir parcourir les partages il faut que le NR gere les Unc.
    • LocalName correspond a l’adresse mapper (il s’agit donc d’une lettre (ex c:)). Si l’adresse est nul elle n’est pas mappe a un lecteur reseau
    • RemoteName correspond a l’adresse de la resource demande, par exemple une architecture type smb retournera:
      • domainename puis \\servername puis sharename. Ensuite windows cherche dans la base de registre quel drivers est associe ac ce NP et lui envoie des requetes (avec \\servername\sharename comme adresse).
  • NPAddConnection : indique au NR qu’il doit etablir une connection avec la ressource demande, effectue le mappage reseau si localname n’est pas null et si le mappage n’est pas deja fait.
  • NPGetResource : cherche le remotename associe avec un chemin local, et verifie que le lecteur reseau soit monte.

Exemples

  • le partage “z:” mappe sur \\192.168.0.9\shared a pour adresse reel : \Device\SmbSampleMiniRedirector\;Z:\192.168.0.9\shared
  • NPAddConnection recevra comme parametre (local=”Z:”, remote:=”\\192.168.0.9\shared”)

Network Redirector (drivers)

Divers

  • UNC: unified name convention
  • FsRtlRegisterUncProvider : enregistre le drivers aupres du Multiple UNC Provider (MUP), attention l’enregistrement produit un irp qu’il faut resoudre correctement.On appelle cette fonction dans DriverEntry.(fait une requete IRP_MJ_CREATE qui doit retourner STATUS_SUCCESS)
  • FsRtlDeregisterUncProvider : se desenregistre aupres du MUP
  • IoRegisterFileSystem : pr les systemes de fichiers “physique”, charge les drivers sous-jacents
  • IOCTL_REDIR_QUERY_PATH : demande la taille de la plus grande chaine reconnu dans le path fourni (savoir qui va recevoir les requetes pour une certaine adresse unc)

Trace d'un parcours des resources reseau

On ouvre l’explorateur on va dans le voisinage reseau, on clique sur notre network provider:

  • NPOpenEnum/NPEnumRessource (enumere les resources)
    • on retourne successivement : domainename, \\servername, sharename
  • NPAddConnection3 (demande de connection a votre reseau distant)

On arrive sur un share:

  • IOCTL_REDIR_QUERY_PATH : le drivers recoit cette ioctl pour verifier si ce path unc est gere par ce drivers
  • IRP_MJ_* : requete irp de systeme de fichier avec comme adresse : \servername\sharename

Kernel thread

HANDLE ThreadHandle;
#define DE_THREAD_WAIT_MSEC (1000)
 
VOID DriverEntry_Async(PVOID Parameter)
{
  NTSTATUS Status = STATUS_SUCCESS;
  LARGE_INTEGER waitPeriod;
 
  waitPeriod = RtlConvertLongToLargeInteger((LONG) -(10 * 1000 * DE_THREAD_WAIT_MSEC));
  KeDelayExecutionThread(KernelMode, FALSE, &waitPeriod);
  Status=STATUS_SUCCESS;
  PsTerminateSystemThread(Status);
  return;	
}
 
Status = PsCreateSystemThread(&ThreadHandle,THREAD_ALL_ACCESS, 0, 0, 0, DriverEntry_Async, 0);
 
driverswindows.txt · Last modified: 2005/10/03 19:55 by ctaf
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki