📄 sea.c
字号:
/*__________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: sea.c,v 1.6 2002/08/06 20:09:49 dallen Exp $
__________________________________________________________________________*/
#include "pgpSDACreate.h"
#include "sea.h"
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + \
((PIMAGE_DOS_HEADER)a)->e_lfanew))
FILELIST *ReverseFileList(FILELIST *flin)
{
FILELIST *flnext,*flout;
flout=NULL;
while(flin!=NULL)
{
flnext=flin->next;
flin->next=flout;
flout=flin;
flin=flnext;
}
return (flout);
}
/* Generic event handler */
PGPError
SDAEvents(
PGPContextRef context,
SDAEvent *event,
PGPUserValue userValue
)
{
(void) context;
switch( event->type )
{
case kSDAEvent_ErrorEvent:
{
SDAEventErrorData *d = &event->data.errorData;
printf("Error encoding file %s\n",d->fileName);
break;
}
case kSDAEvent_ProgressEvent:
{
SDAEventProgressData *d = &event->data.progressData;
break;
}
case kSDAEvent_NewFileEvent:
{
SDAEventNewFileData *d = &event->data.newfileData;
printf("Adding %s\n",d->fileName);
break;
}
case kSDAEvent_GetSDARandomBitsEvent:
{
SDAEventGetSDARandomBitsData *d = &event->data.randomData;
break;
}
case kSDAEvent_WriteSDAStubEvent:
{
DWORD dwStubSize;
HRSRC hRCStub;
HGLOBAL hGBStub;
char *pStubData;
HMODULE hModule;
SDAEventWriteSDAStubData *d = &event->data.stubData;
hModule=GetModuleHandle(NULL);
hRCStub=FindResource(hModule,
MAKEINTRESOURCE(IDR_SEASTUB),
RT_RCDATA);
dwStubSize=SizeofResource(hModule,hRCStub);
hGBStub=LoadResource(hModule,hRCStub);
pStubData=(char *)LockResource(hGBStub);
// Sanity checking here for resource munging
if(!((*(USHORT *)pStubData == IMAGE_DOS_SIGNATURE) &&
(*(DWORD *)NTSIGNATURE (pStubData) == IMAGE_NT_SIGNATURE)))
{
printf("Error: Could not open stub resource.\n");
return kPGPError_UserAbort;
}
// Copy SDA.exe prefix executable into SDA file and
// set header offset so we can find data again.
// Write out stub to disk from resources
fwrite(pStubData,1,dwStubSize,d->fOutput);
UnlockResource(hGBStub);
FreeResource(hGBStub);
break;
}
default:
break;
}
return kPGPError_NoErr;
}
int main(int argc, char* argv[])
{
FILE *fout;
char szOutput[MAX_PATH+1];
char szDirectory[MAX_PATH+1];
FILELIST *fl;
PGPError err;
struct _stat buf;
PGPInt32 iresult;
PGPBoolean bSilent = FALSE;
if((argc < 3) || (argc > 4))
{
//usage error
printf("MakeSEA <output filename> <input directory> <silent>\n");
return -1;
}
if(argc == 4)
{
if ((strcmp(argv[3], "silent") != 0) && (strcmp(argv[3], "SILENT") != 0))
{
//usage error
printf("MakeSEA <output filename> <input directory> <silent>\n");
return -1;
}
bSilent = TRUE;
}
strcpy(szOutput,argv[1]);
strcpy(szDirectory,argv[2]);
iresult = _stat( szDirectory, &buf );
if (iresult != 0) {
printf("<input directory> does not exist.\n");
return -1;
}
fout=fopen(szOutput,"wb");
if(fout==0)
{
printf("Could not open output file for writing\n");
return -1;
}
fclose (fout);
// Get files from directory parameter
fl=NULL;
AddToFileList(&fl,szDirectory,NULL);
fl=ReverseFileList(fl);
if (bSilent)
{
err=SDACreate(NULL,fl,
szOutput,NULL,
SDAEvents,NULL,
SEA_SILENT);
}
else
{
err=SDACreate(NULL,fl,
szOutput,NULL,
SDAEvents,NULL,
0);
}
FreeFileList(fl);
if(IsPGPError(err))
{
remove(szOutput);
}
return 0;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -