⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glocal.cpp

📁 Dialogic VFX传真卡编程,程序实现了在Windows Fax服务中注册Dialogic VFX传真的功能
💻 CPP
字号:
#include "stdafx.h"
#include "sivfax.h"
#include "global.h"
#include "resource.h"
HANDLE			g_hIocpRing;
ULONG_PTR		g_dwComKeyRing;
PDEVICE_INFO	*g_pDeviceInfo;
HANDLE			g_hInstance;
HLINEAPP		g_LineAppHandle;
HANDLE			g_HeapHandle;
DWORD			g_dwLines;
HANDLE			g_hCallbackIocp;
HANDLE			g_hWorkerThread;

BOOL PostJobStatus(
    HANDLE     CompletionPort,
    ULONG_PTR  CompletionKey,
	DWORD	   dwPageCount,
    DWORD      StatusId,
    DWORD      ErrorCode)
{

    PFAX_DEV_STATUS  pFaxDevStatus;

    pFaxDevStatus = (PFAX_DEV_STATUS)( MemAllocMacro(sizeof(FAX_DEV_STATUS)));
    if (pFaxDevStatus != NULL) {
        pFaxDevStatus->SizeOfStruct = sizeof(FAX_DEV_STATUS);
        pFaxDevStatus->StatusId = StatusId;
        pFaxDevStatus->StringId = 0;
        pFaxDevStatus->PageCount = dwPageCount;
        pFaxDevStatus->CSI = NULL;
        pFaxDevStatus->CallerId = NULL;
        pFaxDevStatus->RoutingInfo = NULL;
        pFaxDevStatus->ErrorCode = ErrorCode;
        return PostQueuedCompletionStatus(CompletionPort, sizeof(FAX_DEV_STATUS), CompletionKey, (LPOVERLAPPED) pFaxDevStatus);
    }
	else
		return FALSE;
}
BOOL PostJobStatus2(PDEVICE_INFO pd,DWORD ErrorCode)
{
	PJOB_INFO pJobInfo;
	DWORD dwSize;
	pJobInfo = pd->pJobInfo;
	DWORD upStringOffset;
//	EnterCriticalSection(&pd->cs);
	dwSize = sizeof(FAX_DEV_STATUS);
	if (pJobInfo->CSI != NULL)
		dwSize += (lstrlen(pJobInfo->CSI) + 1)* sizeof(WCHAR);
	if (pJobInfo->CallerId != NULL)
		dwSize += (lstrlen(pJobInfo->CallerId) + 1)* sizeof(WCHAR);
	if (pJobInfo->RoutingInfo != NULL)
		dwSize += (lstrlen(pJobInfo->RoutingInfo) + 1)* sizeof(WCHAR);
    PFAX_DEV_STATUS  pFaxDevStatus;

    pFaxDevStatus = (PFAX_DEV_STATUS)( MemAllocMacro(dwSize));
	pFaxDevStatus->SizeOfStruct = sizeof(FAX_DEV_STATUS);
	pFaxDevStatus->StatusId = pJobInfo->Status;
	pFaxDevStatus->StringId = 0;
	pFaxDevStatus->PageCount = pJobInfo->PageCount;
	upStringOffset = sizeof(FAX_DEV_STATUS);
    pJobInfo->CSI = NULL;
	if (pJobInfo->CSI != NULL) {
        pFaxDevStatus->CSI = (LPWSTR) ((UINT_PTR) pFaxDevStatus + upStringOffset);
        lstrcpy(pFaxDevStatus->CSI, pJobInfo->CSI);
        upStringOffset += (lstrlen(pJobInfo->CSI) + 1) * sizeof(WCHAR);
    }
    pFaxDevStatus->CallerId = NULL;
    if (pJobInfo->CallerId != NULL) {
        pFaxDevStatus->CallerId = (LPWSTR) ((UINT_PTR) pFaxDevStatus + upStringOffset);
        lstrcpy(pFaxDevStatus->CallerId, pJobInfo->CallerId);
        upStringOffset += (lstrlen(pJobInfo->CallerId) + 1) * sizeof(WCHAR);
    }
    pFaxDevStatus->RoutingInfo = NULL;
    if (pJobInfo->RoutingInfo != NULL) {
        pFaxDevStatus->RoutingInfo = (LPWSTR) ((UINT_PTR) pFaxDevStatus + upStringOffset);
        lstrcpy(pFaxDevStatus->RoutingInfo, pJobInfo->RoutingInfo);
        upStringOffset += (lstrlen(pJobInfo->RoutingInfo) + 1) * sizeof(WCHAR);
    }
	pFaxDevStatus->ErrorCode = ErrorCode;

	WriteDebugString(L"PostJobStatus2: StatusId:%8x,PageCount:%d,ErrorCode:%8x",pFaxDevStatus->StatusId,
		pFaxDevStatus->PageCount,pFaxDevStatus->ErrorCode);
	if (pFaxDevStatus->CSI)
		WriteDebugString(L"CSI:%s",pFaxDevStatus->CSI);
	if (pFaxDevStatus->CallerId)
		WriteDebugString(L"CallerId:%s",pFaxDevStatus->CallerId);
	if (pFaxDevStatus->RoutingInfo)
		WriteDebugString(L"RoutingInfo:%s",pFaxDevStatus->RoutingInfo);

	PostQueuedCompletionStatus(pJobInfo->CompletionPortHandle , sizeof(FAX_DEV_STATUS), pJobInfo->CompletionKey, (LPOVERLAPPED) pFaxDevStatus);
//	LeaveCriticalSection(&pd->cs);
	Sleep(100);
	return TRUE;
}
unsigned short GetTiffPages(LPCTSTR lpszFileName)
{
	BOOL	bRet;
	HANDLE	hFile = INVALID_HANDLE_VALUE;
	short	IFDEntryItems = 4;
	long	IFDPos = 0;
	unsigned short	usPages = 0;
	DWORD	dwByteReaded;

	hFile = CreateFile(lpszFileName,GENERIC_READ,
		FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,
		OPEN_EXISTING,0,NULL);
	if (INVALID_HANDLE_VALUE == hFile)
		return 0;
	SetFilePointer(hFile,4,NULL,FILE_CURRENT);
	if (NO_ERROR != GetLastError())
	{
		CloseHandle(hFile);
		return 0;
	}

	while(TRUE)
	{
		bRet = ReadFile(hFile,&IFDPos,sizeof(long),&dwByteReaded,NULL);
		if(bRet && dwByteReaded && IFDPos)
		{
			usPages ++;
			SetFilePointer(hFile, IFDPos, NULL, FILE_BEGIN);
			if (NO_ERROR == GetLastError())
			{
				bRet = ReadFile(hFile,&IFDEntryItems,sizeof(short),&dwByteReaded,NULL);
				if (bRet && dwByteReaded && IFDEntryItems)
				{
					SetFilePointer(hFile,IFDEntryItems * 12 , NULL, FILE_CURRENT);
					if (NO_ERROR == GetLastError())
						continue;
					else
						break;
				}
				else
					break;
			}
		}
		else
			break;
	}
	CloseHandle(hFile);
	return usPages;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -