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

#ifndef __OBJECT_DIRECTORY_WXP_H_
#define __OBJECT_DIRECTORY_WXP_H_

#include <ntddk.h>

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

// Struktura tela objektu adresare
typedef struct _OBJECT_DIRECTORY_WXP
{
  // Hashovaci tabulka s polozkami
  POBJECT_DIRECTORY_ENTRY_WXP HashBuckets[37];
  // Zamek pro synchronizaci nad adresarem
  PVOID Lock;
  PVOID DeviceMap;
  ULONG32 SessionId;
  USHORT Reserved;
  USHORT SymbolicLinkUsageCount;
} OBJECT_DIRECTORY_WXP, *POBJECT_DIRECTORY_WXP;



// 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 DOObjectHashBucketsWXP(a)       (PVOID)&((POBJECT_DIRECTORY_WXP)a)->HashBuckets
#define DOEntryChaingLinkWXP(a)         ((POBJECT_DIRECTORY_ENTRY_WXP)a)->ChainLink
#define DOEntryObjectWXP(a)             ((POBJECT_DIRECTORY_ENTRY_WXP)a)->Object
#define DOObjectLockWXP(a)              (PVOID)&((POBJECT_DIRECTORY_WXP)a)->Lock




#endif
