You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
6.3 KiB
276 lines
6.3 KiB
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
lmhosts.h
|
|
|
|
Abstract:
|
|
|
|
This is the header file for the lmhosts facility of the nbt driver.
|
|
|
|
Author:
|
|
|
|
Eric Chin (ericc) April 28, 1992
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#ifndef _LMHOSTS_H_
|
|
#define _LMHOSTS_H_
|
|
|
|
|
|
|
|
//
|
|
// Configuration Defaults
|
|
//
|
|
// Only the first MAX_PARSE_BYTES of each line in the lmhosts file is
|
|
// examined.
|
|
//
|
|
|
|
#define DATABASEPATH "\\SystemRoot\\nt\\system32\\drivers\\etc"
|
|
|
|
#define LMHOSTSFILE "lmhosts" // name of lmhosts file
|
|
|
|
#define MAX_FILE_IO_THREADS 1 // threads to read
|
|
// lmhosts file
|
|
#ifdef VXD
|
|
#define DEF_PRELOAD 100 // Default entries to preload
|
|
#define MAX_PRELOAD 500 // Max cache entries to preload
|
|
#else
|
|
#define DEF_PRELOAD 1000 // Default entries to preload
|
|
#define MAX_PRELOAD 2000 // max cache entries to preload
|
|
#endif
|
|
|
|
#define MAX_MEMBERS_INTERNET_GROUP 50 // max size of internet group
|
|
|
|
//
|
|
// Reserved Keywords in the lmhosts File
|
|
//
|
|
#define BEG_ALT_TOKEN "#BEGIN_ALTERNATE" // alternate block
|
|
#define DOMAIN_TOKEN "#DOM:" // specifies LM domain
|
|
#define END_ALT_TOKEN "#END_ALTERNATE" // alternate block
|
|
#define INCLUDE_TOKEN "#INCLUDE" // include a file
|
|
#define PRELOAD_TOKEN "#PRE" // preload this entry
|
|
#define NOFNR_TOKEN "#NOFNR" // no find name request
|
|
|
|
|
|
//
|
|
// Macro Definitions
|
|
//
|
|
|
|
//#define min(x, y) ((x) < (y) ? (x) : (y))
|
|
|
|
|
|
|
|
//
|
|
// Public Definitions
|
|
//
|
|
//
|
|
// For each file that is opened, a LM_FILE object is created.
|
|
//
|
|
typedef struct _LM_FILE
|
|
{
|
|
#ifndef VXD
|
|
KSPIN_LOCK f_lock; // protects this object
|
|
LONG f_refcount; // current no of references
|
|
#endif
|
|
|
|
HANDLE f_handle; // handle from ZwOpenFile()
|
|
LONG f_lineno; // current line number
|
|
|
|
#ifndef VXD
|
|
LARGE_INTEGER f_fileOffset; // current offset into file
|
|
|
|
PUCHAR f_current; // buffer position to read
|
|
PUCHAR f_limit; // last byte + 1 of buffer
|
|
PUCHAR f_buffer; // start of buffer
|
|
#else
|
|
PUCHAR f_linebuffer; // line buffer
|
|
PUCHAR f_buffer; // file buffer
|
|
BOOL f_EOF ; // TRUE if EOF
|
|
ULONG f_CurPos ; // Current Pos. in File Buffer
|
|
ULONG f_EndOfData ; // Last valid data in File Buffer
|
|
PUCHAR f_BackUp; // copy here In case of #INCLUDE
|
|
#endif
|
|
|
|
} LM_FILE, *PLM_FILE;
|
|
|
|
|
|
//
|
|
// The LM_IPADDRESS_LIST object contains pertinent information about a
|
|
// group of ip addresses.
|
|
//
|
|
//
|
|
typedef struct _LM_IPADDRESS_LIST
|
|
{
|
|
|
|
KSPIN_LOCK i_rcntlock; // protects i_refcount
|
|
LONG i_refcount; // current no of references
|
|
KSPIN_LOCK i_lock; // only when adding to i_addrs[]
|
|
int i_maxaddrs; // max capacity of i_addrs[]
|
|
int i_numaddrs; // current no of ip addresses
|
|
unsigned long i_addrs[1]; // the array of ip addresses
|
|
|
|
} LM_IPADDRESS_LIST, *PLM_IPADDRESS_LIST;
|
|
|
|
|
|
//
|
|
// An LM_PARSE_FUNCTION may be called recursively to handle #INCLUDE
|
|
// directives in an lmhosts file.
|
|
//
|
|
//
|
|
typedef unsigned long (* LM_PARSE_FUNCTION) (
|
|
IN PUCHAR path, // file to parse
|
|
IN PUCHAR target OPTIONAL, // NetBIOS name
|
|
IN CHAR RecurseLevel, // process #INCLUDE's ?
|
|
OUT BOOLEAN *NoFindName // do not do find name
|
|
);
|
|
|
|
|
|
//
|
|
// The LM_WORK_ITEM object is the interface between lm_lookup() and
|
|
// LmFindName().
|
|
//
|
|
//
|
|
typedef struct _LM_WORK_ITEM
|
|
{ // work for io thread(s)
|
|
|
|
LIST_ENTRY w_list; // links to other items
|
|
// mblk_t *w_mp; // STREAMS buffer
|
|
|
|
} LM_WORK_ITEM, *PLM_WORK_ITEM;
|
|
|
|
|
|
|
|
//
|
|
// Private Function Prototypes
|
|
//
|
|
int
|
|
LmAddToDomAddrList (
|
|
IN PUCHAR name,
|
|
IN unsigned long inaddr
|
|
);
|
|
|
|
NTSTATUS
|
|
LmCloseFile (
|
|
IN PLM_FILE handle
|
|
);
|
|
|
|
NTSTATUS
|
|
LmCreateThreads (
|
|
IN int nthreads
|
|
);
|
|
|
|
NTSTATUS
|
|
LmDeleteAllDomAddrLists (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
LmDerefDomAddrList(
|
|
PLM_IPADDRESS_LIST arrayp
|
|
);
|
|
|
|
char *
|
|
LmExpandName (
|
|
OUT PUCHAR dest,
|
|
IN PUCHAR source,
|
|
IN UCHAR last
|
|
);
|
|
|
|
PUCHAR
|
|
LmFgets (
|
|
IN PLM_FILE pfile,
|
|
OUT int *nbytes
|
|
);
|
|
|
|
NTSTATUS
|
|
LmFindName (
|
|
VOID
|
|
);
|
|
|
|
PLM_IPADDRESS_LIST
|
|
LmGetDomAddrList (
|
|
PUCHAR name
|
|
);
|
|
|
|
unsigned long
|
|
LmGetIpAddr (
|
|
IN PUCHAR path,
|
|
IN PUCHAR target,
|
|
IN CHAR RecurseDepth,
|
|
OUT BOOLEAN *NoFindName
|
|
);
|
|
|
|
NTSTATUS
|
|
LmGetFullPath (
|
|
IN PUCHAR target,
|
|
OUT PUCHAR *path
|
|
);
|
|
|
|
unsigned long
|
|
LmInclude(
|
|
IN PUCHAR file,
|
|
IN LM_PARSE_FUNCTION function,
|
|
IN PUCHAR argument,
|
|
IN CHAR RecurseDepth,
|
|
OUT BOOLEAN *NoFindName
|
|
);
|
|
|
|
NTSTATUS
|
|
LmInitDomAddrLists (
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
LmLogOpenError (
|
|
IN PUCHAR path,
|
|
IN NTSTATUS unused
|
|
);
|
|
|
|
VOID
|
|
LmLogSyntaxError (
|
|
IN LONG lineno
|
|
);
|
|
|
|
PLM_FILE
|
|
LmOpenFile (
|
|
IN PUCHAR path
|
|
);
|
|
|
|
int
|
|
LmPreloadEntry (
|
|
IN PUCHAR name,
|
|
IN unsigned long inaddr,
|
|
IN unsigned int NoFNR
|
|
);
|
|
|
|
BOOLEAN
|
|
LmPutCacheEntry (
|
|
// IN mblk_t *mp,
|
|
IN unsigned char *name,
|
|
IN unsigned long inaddr,
|
|
IN unsigned int ttl,
|
|
IN LONG nb_flags,
|
|
IN unsigned int NoFNR
|
|
);
|
|
|
|
NTSTATUS
|
|
LmTerminateThreads(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// Functions Imported from ..\common
|
|
//
|
|
extern unsigned long
|
|
inet_addr(
|
|
IN char *cp
|
|
);
|
|
|
|
|
|
|
|
|
|
#endif // _LMHOSTS_H_
|