
/**
 * @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 2000.
 * Jeho soucasti jsou dale makra, ktera umoznuji nektere polozky z techto internich
 * struktur "vytahnnout."
 */

#ifndef __OBJECT_DIRECTORY_W2K_H_
#define __OBJECT_DIRECTORY_W2K_H_

#include <ntddk.h>

// Struktura jedne polozky v hashovaci tabulce objektu adresare
typedef struct _OBJECT_DIRECTORY_ENTRY_W2K
{                                                                                
  // Adresa nasledujici polozky ve spojovem seznamu      
  struct _OBJECT_DIRECTORY_ENTRY_W2K *ChainLink;
  // Adresa tela objektu
  PVOID Object;
} OBJECT_DIRECTORY_ENTRY_W2K, *POBJECT_DIRECTORY_ENTRY_W2K;

// Struktura tela objektu adresare
typedef struct _OBJECT_DIRECTORY_W2K
{
  // Hashovaci tabulka s polozkami
  POBJECT_DIRECTORY_ENTRY_W2K HashBuckets[37];
  POBJECT_DIRECTORY_ENTRY_W2K *LookupBucket;
  UCHAR LookupFound;
  UCHAR Padding;
  USHORT SymbolicLinkUsageCount;
  PVOID DeviceMap;
} OBJECT_DIRECTORY_W2K, *POBJECT_DIRECTORY_W2K;



// 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 DOObjectHashBucketsW2K(a)      (PVOID)&((POBJECT_DIRECTORY_W2K)a)->HashBuckets
#define DOEntryChaingLinkW2K(a)        ((POBJECT_DIRECTORY_ENTRY_W2K)a)->ChainLink
#define DOEntryObjectW2K(a)            ((POBJECT_DIRECTORY_ENTRY_W2K)a)->Object



#endif
