windows-nt/Source/XPSP1/NT/com/oleutest/stgdrt/illeg.cxx
2020-09-26 16:20:57 +08:00

149 lines
4.7 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: illeg.cxx
//
// Contents: Illegitimate tests
//
// History: 17-Nov-92 DrewB Created
//
//----------------------------------------------------------------------------
#include "headers.cxx"
#pragma hdrstop
#include <io.h>
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include "illeg.hxx"
void i_storage(void)
{
WStorage *pwstg;
IStorage *pstg, *pstg2;
IStream *pstm;
IllResult("StgCreateDocfile with NULL ppstg",
StgCreateDocfile(NULL, 0, 0, NULL));
IllResult("StgCreateDocfile with non-zero reserved",
StgCreateDocfile(NULL, 0, 1, &pstg));
IllResult("StgCreateDocfile with illegal permissions",
StgCreateDocfile(NULL, 0, 0, &pstg));
int fd;
fd = _creat(OlecsOut(DRTDF), _S_IREAD);
if (fd<0)
error(EXIT_BADSC, "Unable to create file '%s'\n", OlecsOut(DRTDF));
_close(fd);
IllResult("StgCreateDocfile with STGM_WRITE over read-only file",
StgCreateDocfile(DRTDF, ROOTP(STGM_READWRITE), 0, &pstg));
_chmod(OlecsOut(DRTDF), _S_IREAD | _S_IWRITE);
IllResult("StgOpenStorage with NULL ppstg",
StgOpenStorage(NULL, NULL, 0, NULL, 0, NULL));
IllResult("StgOpenStorage with NULL name",
StgOpenStorage(NULL, NULL, 0, NULL, 0, &pstg));
IllResult("StgOpenStorage with illegal permissions",
StgOpenStorage(DRTDF, NULL, 0xffffffff, NULL, 0, &pstg));
IllResult("StgOpenStorage with non-zero reserved",
StgOpenStorage(DRTDF, NULL, ROOTP(STGM_READWRITE), NULL,
1, &pstg));
#if WIN32 != 300
// This will work on Cairo because it will open a file storage
IllResult("StgOpenStorage on non-docfile",
StgOpenStorage(DRTDF, NULL, ROOTP(STGM_READWRITE), NULL,
0, &pstg));
#endif
WStgCreateDocfile(DRTDF, ROOTP(STGM_READWRITE) | STGM_CREATE, 0, &pwstg);
pstg = pwstg->GetI();
IllResult("OpenStream that doesn't exist",
pstg->OpenStream(STR("NoName"), 0, STMP(STGM_READWRITE),
0, &pstm));
IllResult("OpenStorage that doesn't exist",
pstg->OpenStorage(STR("NoName"), NULL, STGP(STGM_READWRITE),
NULL, 0, &pstg2));
pwstg->Unwrap();
}
#define STREAMSIZE 128
void i_stream(void)
{
WStorage *pwstg;
WStream *pwstm;
IStream *pstm;
BYTE bBuffer[STREAMSIZE];
ULONG cbRead;
LARGE_INTEGER liSeek;
ULARGE_INTEGER uliPos;
ULARGE_INTEGER uliSize;
ULARGE_INTEGER cb;
WStgCreateDocfile(DRTDF, ROOTP(STGM_READWRITE), 0, &pwstg);
pwstg->CreateStream(STR("Stream"), STMP(STGM_READ), 0, 0, &pwstm);
pstm = pwstm->GetI();
IllResult("Read with NULL buffer",
pstm->Read(NULL, STREAMSIZE, NULL));
fExitOnFail = FALSE;
pwstm->Read(bBuffer, STREAMSIZE, &cbRead);
fExitOnFail = TRUE;
if (cbRead != 0)
error(EXIT_BADSC, "Read %lu bytes on zero-length stream\n", cbRead);
IllResult("Write with NULL buffer",
pstm->Write(NULL, STREAMSIZE, NULL));
IllResult("Write on read-only stream",
pstm->Write(bBuffer, STREAMSIZE, NULL));
LISet32(liSeek, 0);
IllResult("Seek with invalid origin",
pstm->Seek(liSeek, (DWORD)(~STREAM_SEEK_SET), NULL));
#pragma warning(disable:4245)
// LISet32 in objbase.h has a bug that issues warning for negative values
LISet32(liSeek, -1);
#pragma warning(default:4245)
IllResult("Seek before beginning",
pstm->Seek(liSeek, STREAM_SEEK_CUR, NULL));
ULISet32(uliSize, STREAMSIZE);
IllResult("SetSize on read-only stream",
pstm->SetSize(uliSize));
ULISet32(uliPos, 0);
ULISet32(cb, STREAMSIZE);
IllResult("LockRegion attempt",
pstm->LockRegion(uliPos, cb, LOCK_ONLYONCE));
IllResult("UnlockRegion attempt",
pstm->UnlockRegion(uliPos, cb, LOCK_ONLYONCE));
pwstm->Unwrap();
pwstg->Unwrap();
}
void i_enum(void)
{
WStorage *pwstg;
IStorage *pstg;
IEnumSTATSTG *penm;
WStgCreateDocfile(DRTDF, ROOTP(STGM_READWRITE), 0, &pwstg);
pstg = pwstg->GetI();
IllResult("EnumElements with NULL ppenm",
pstg->EnumElements(0, NULL, 0, NULL));
IllResult("EnumElements with non-zero reserved1",
pstg->EnumElements(1, NULL, 0, &penm));
IllResult("EnumElements with non-zero reserved2",
pstg->EnumElements(0, (void *)1, 0, &penm));
IllResult("EnumElements with non-zero reserved3",
pstg->EnumElements(0, NULL, 1, &penm));
pwstg->Unwrap();
}