
/**
 * @file object_directory_w7.h
 *
 * Tento soubor je soucasti frameworku pro praci s datovymi strukturami spravce objektu.
 * Obsahuje definice internich struktur objektu adresare pro Windows Vista 32bit a 64bit.
 * Jeho soucasti jsou dale makra, ktera umoznuji nektere polozky z techto internich
 * struktur "vytahnnout."
 */

#ifndef __OBJECT_DIRECTORY_VISTA_H_
#define __OBJECT_DIRECTORY_VISTA_H_

#include <ntddk.h>

// Struktura jedne polozky v hashovaci tabulce objektu adresare
typedef struct _OBJECT_DIRECTORY_ENTRY_VISTA
{                                                                                
  // Adresa nasledujici polozky ve spojovem seznamu      
  struct _OBJECT_DIRECTORY_ENTRY_VISTA *ChainLink;
  // Adresa tela objektu
  PVOID Object;
  // Hash hodnota jmena polozky
  ULONG32 HashValue;
} OBJECT_DIRECTORY_ENTRY_VISTA, *POBJECT_DIRECTORY_ENTRY_VISTA;

// Struktura tela objektu adresare
typedef struct _OBJECT_DIRECTORY_VISTA
{
  // Hashovaci tabulka s polozkami
  POBJECT_DIRECTORY_ENTRY_VISTA HashBuckets[37];
  // Zamek pro synchronizaci nad adresarem
  PVOID Lock;
  PVOID DeviceMap;
  ULONG32 SessionId;
  PVOID NamespaceEntry;
  ULONG32 Flags;
} OBJECT_DIRECTORY_VISTA, *POBJECT_DIRECTORY_VISTA;
                                                                                                  

																								  // Makra pro zjisteni dulezitych clenu v internich strukturach adresare.
// Makra pro zjisteni dulezitych clenu v internich strukturach adresare.
// Pouzivaji je rutiny v souboru object_directory.c pro zajisteni nezavislosti
// na verzi operacniho systemu.		
#define DOObjectHashBucketsVista(a)       (PVOID)&((POBJECT_DIRECTORY_VISTA)a)->HashBuckets
#define DOEntryChaingLinkVista(a)         ((POBJECT_DIRECTORY_ENTRY_VISTA)a)->ChainLink
#define DOEntryObjectVista(a)             ((POBJECT_DIRECTORY_ENTRY_VISTA)a)->Object
#define DOObjectLockVista(a)              &((POBJECT_DIRECTORY_VISTA)a)->Lock




#endif
