Leaked source code of windows server 2003
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.
 
 
 
 
 
 

278 lines
7.6 KiB

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <assert.h>
#define IGNORE_IF_SPLIT 130
#define ERROR_IF_SPLIT 131
#define ERROR_IF_NOT_SPLIT 132
#define TRANSACTION_ADD 201
#define TRANSACTION_DEL 202
#define DONT_STORE_FILES 203
#define STORE_FILE 204
#define STORE_PTR 205
#define TRANSACTION_QUERY 220
#define DEL 210
#define ADD_STORE 206
#define ADD_DONT_STORE 207
#define ADD_STORE_FROM_FILE 208
#define QUERY 221
#define MAX_VERSION 20
#define MAX_PRODUCT 120
#define MAX_COMMENT 346
#define MAX_ID 10
#define MAX_DATE 8
#define MAX_TIME 8
#define MAX_UNUSED 0
// Define some constants for lengths in the transaction record
// in order to define the maximum length of the record that will
// be written to the master file.
#define TRANS_NUM_COMMAS 8
#define TRANS_EOL 1
#define TRANS_ADD_DEL 3
#define TRANS_FILE_PTR 4
// Define some constants for determining what happened when an NT
// file was stored
#define FILE_STORED 1
#define FILE_SKIPPED 2
#define FILE_ERRORED 3
// Define some flag values for determing whether or not to add the file
// pointer to refs.ptr and file.ptr.
#define ADD_ENTIRE_ENTRY 1
#define SKIP_ENTIRE_ENTRY 2
#define ADD_ONLY_REFSPTR 4
#define DELETE_REFSPTR 8
typedef struct _TRANSACTION {
LPTSTR szId; // Id for this transaction
// This always refers to the transaction file that
// is being deleted or added
LPTSTR szDelId; // Id for a delete transaction
// This is just appended to the master file, there is
// no file created for it.
DWORD TransState; // State of this transaction
DWORD FileOrPtr; // Are we storing files or pointers?
LPTSTR szProduct; // Name of the product being added
LPTSTR szVersion; // Version of the product
LPTSTR szComment; // Description
LPTSTR szTransFileName; // Full Path and name of the Transaction file
LPTSTR szTime;
LPTSTR szDate;
LPTSTR szUnused;
} TRANSACTION, *PTRANSACTION;
/* ++
Description of the fields in COM_ARGS
szSrcDir Directory where source files exist
szFileName File name(s) to store in the symbols server.
This may contain wild card characters
Recurse Recurse into subdirectories
szRootDir Root Directory of the symbols server
szSymbolsDir Symbols Directory under the root of the symbols server
szSrcPath Path to the files. If this is not NULL,
then store a pointer to the files instead of
the files. Typically, this is the same as szSrcDir.
The difference is that szSrcPath is the path that
the debugger will use to find the symbol file.
Thus, it needs to be a network share, whereas szSrcDir
can be a local path.
szId Reference string for this transaction. This must be
unique for each transaction.
szAdminDir Admin directory under the root of the symbols server
szProduct Name of the product
szVersion Version of the product
szComment Text description ... optional
szMasterFileName The full path and name of the master file. This contains
the master transaction record for each transaction.
szServerFileName The full path and name of the file that contains a list of
all the transactions that are currently stored in the server.
szTransFileName The full path and name of the file that contains a list of
all the files added by this transaction. This only gets
initialized during GetCommandLineArgs if symstore is only
supposed to store the transaction file and not store any
files on the symbol server.
szShareName This is used with the /x option. It is a prefix of
szFileName. It is the part of szFileName that may
change later when the files are added to the server.
TransState Is this TRANSACTION_ADD or TRANSACTION_DEL
StoreFlags Possible values: STORE or DONT_STORE
AppendStoreFile When storing to a file instead of adding the files to the
symbol server, open the file with append.
-- */
typedef struct _COMMAND_ARGS {
LPTSTR szSrcDir;
LPTSTR szFileName;
BOOL StorePtrs;
BOOL Recurse;
LPTSTR szRootDir;
LPTSTR szSymbolsDir;
LPTSTR szSrcPath;
LPTSTR szId;
LPTSTR szAdminDir;
LPTSTR szProduct;
LPTSTR szVersion;
LPTSTR szComment;
LPTSTR szUnused;
LPTSTR szMasterFileName;
LPTSTR szServerFileName;
LPTSTR szTransFileName;
LPTSTR szShareName;
DWORD ShareNameLength;
DWORD TransState;
DWORD StoreFlags;
BOOL AppendStoreFile;
FILE *pStoreFromFile;
BOOL AppendIDToFile;
BOOL VerboseOutput;
DWORD Filter;
BOOL CorruptBinaries;
} COM_ARGS, *PCOM_ARGS;
typedef struct _FILE_COUNTS {
DWORD NumPassedFiles;
DWORD NumIgnoredFiles;
DWORD NumFailedFiles;
} FILE_COUNTS, *PFILE_COUNTS;
BOOL
StoreDbg(
LPTSTR szDestDir,
LPTSTR szFileName,
LPTSTR szPtrFileName,
USHORT *rc_flag
);
BOOL
StorePdb(
LPTSTR szDestDir,
LPTSTR szFileName,
LPTSTR szPtrFileName, // If this is NULL, then the file is stored.
// If this is not NULL, then a pointer to
// the file is stored.
USHORT *rc_flag
);
BOOL
DeleteAllFilesInDirectory(
LPTSTR szDir
);
ULONG GetMaxLineOfRefsPtrFile(
VOID
);
DECLSPEC_NORETURN
VOID
MallocFailed(
VOID
);
typedef struct _LIST_ELEM {
CHAR FName[_MAX_PATH];
CHAR Path[_MAX_PATH];
} LIST_ELEM, *P_LIST_ELEM;
typedef struct _LIST {
LIST_ELEM *List; // Pointers to the file names
DWORD dNumFiles;
} LIST, *P_LIST;
P_LIST
GetList(
LPTSTR szFileName
);
BOOL
InList(
LPTSTR szFileName,
P_LIST pExcludeList
);
BOOL
StoreNtFile(
LPTSTR szDestDir,
LPTSTR szFileName,
LPTSTR szPtrFileName,
USHORT *rc
);
DWORD
StoreFromFile(
FILE *pStoreFromFile,
LPTSTR szDestDir,
PFILE_COUNTS pFileCounts
);
BOOL
MyCopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
);
_TCHAR *
_tcsistr(
_TCHAR *s1,
_TCHAR *s2
);
void
MyEnsureTrailingChar(
char *sz,
char c
);
void
MyEnsureTrailingBackslash(
char *sz
);
void
MyEnsureTrailingSlash(
char *sz
);
void
MyEnsureTrailingCR(
char *sz
);
// returns TRUE if Filename matches the regexp /.*~\d+\..{0,3}/
BOOL DoesThisLookLikeAShortFilenameHack(char *Filename);
// from sharedutils.c
DWORD PrivateGetFullPathName(LPCTSTR lpFilename, DWORD nBufferLength, LPTSTR lpBuffer, LPTSTR *lpFilePart);
extern HANDLE hTransFile;
extern DWORD StoreFlags;
extern PCOM_ARGS pArgs;
extern PTRANSACTION pTrans;
extern LONG lMaxTrans; // Maximum number of characters in a transaction record
extern BOOL PubPriPriority;
BOOL FileExists(IN LPCSTR FileName,
OUT PWIN32_FIND_DATA FindData);