Source code of Windows XP (NT5)
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.
|
|
/*****************************************************************************\
* MODULE: ppchange.h * * This module contains functions that handle notification * * * Copyright (C) 1996-1997 Microsoft Corporation * * History: * 28-Apr-1998 Weihai Chen (weihaic) * \*****************************************************************************/
#include "precomp.h"
#include "priv.h"
typedef struct INET_HPRINTER_LIST { LPINET_HPRINTER hPrinter; struct INET_HPRINTER_LIST *next; } INET_HPRINTER_LIST;
typedef INET_HPRINTER_LIST *PINET_HPRINTER_LIST; typedef INET_HPRINTER_LIST *NPINET_HPRINTER_LIST; typedef INET_HPRINTER_LIST *LPINET_HPRINTER_LIST;
static INET_HPRINTER_LIST g_pHandleList = {NULL, NULL};
/*****************************************************************************\
* AddHandleToList * * Add the printer handle to a global link list * \*****************************************************************************/ BOOL AddHandleToList ( LPINET_HPRINTER hPrinter ) { LPINET_HPRINTER_LIST pPrt;
if (pPrt = (LPINET_HPRINTER_LIST)memAlloc(sizeof(INET_HPRINTER_LIST))) { pPrt->next = g_pHandleList.next; pPrt->hPrinter = hPrinter; g_pHandleList.next = pPrt;
return TRUE; } else return FALSE; }
/*****************************************************************************\
* DeleteHandleFromList * * Remove a printer handle from the global link list * \*****************************************************************************/ BOOL DeleteHandleFromList ( LPINET_HPRINTER hPrinter ) { LPINET_HPRINTER_LIST pPrt = &g_pHandleList; LPINET_HPRINTER_LIST pTmp;
while (pPrt->next) { if (pPrt->next->hPrinter == hPrinter) { pTmp = pPrt->next; pPrt->next = pTmp->next; memFree (pTmp, sizeof(INET_HPRINTER_LIST)); return TRUE; } pPrt = pPrt->next; }
return FALSE; }
/*****************************************************************************\
* RefreshNotificationPort * * Go through the handle list and call the refresh if the notify handle is not * null * \*****************************************************************************/ void RefreshNotificationPort ( HANDLE hPort ) { LPINET_HPRINTER_LIST pPrt = g_pHandleList.next;
DBG_MSG(DBG_LEV_CALLTREE, (TEXT("Call: RefreshNotificationPort: Port(%08lX)"), hPort)); while (pPrt) { if (utlValidatePrinterHandle (pPrt->hPrinter) == hPort) { if (pPrt->hPrinter->hNotify) { DBG_MSG(DBG_LEV_CALLTREE, (TEXT("Call: ReplyPrinterChangeNotification: hNotify(%08lX)"), pPrt->hPrinter->hNotify)); ReplyPrinterChangeNotification (pPrt->hPrinter->hNotify, PRINTER_CHANGE_ALL, NULL, NULL); }
} pPrt = pPrt->next; } }
/*****************************************************************************\
* RefreshNotification * * Go through the handle list and call the refresh if the notify handle is not * null * \*****************************************************************************/ void RefreshNotification ( LPINET_HPRINTER hPrinter ) {
RefreshNotificationPort (hPrinter->hPort); }
/*****************************************************************************\
* PPFindFirstPrinterChangeNotification * * Handle the notification request * \*****************************************************************************/ BOOL PPFindFirstPrinterChangeNotification( HANDLE hPrinter, DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify, PDWORD pfdwStatus, PVOID pPrinterNotifyOptions, PVOID pPrinterNotifyInit ) { static PRINTER_NOTIFY_INIT PPNotify = { sizeof (PRINTER_NOTIFY_INIT), 0, 30000 };
DBG_MSG(DBG_LEV_CALLTREE, (TEXT("Call: PPFindFirstPrinterChangeNotification: Printer(%08lX)"), hPrinter));
DBG_MSG(DBG_LEV_CALLTREE, (TEXT("Call: hNotify(%08lX)"),hNotify));
semEnterCrit();
if (utlValidatePrinterHandle(hPrinter)) {
((LPINET_HPRINTER )hPrinter) ->hNotify = hNotify; fdwFlags = PRINTER_CHANGE_ALL; *pfdwStatus = PRINTER_NOTIFY_STATUS_POLL | PRINTER_NOTIFY_STATUS_ENDPOINT; * ((LPPRINTER_NOTIFY_INIT *) pPrinterNotifyInit) = &PPNotify; }
semLeaveCrit ();
return TRUE; }
BOOL PPFindClosePrinterChangeNotification( HANDLE hPrinter ) { return TRUE; }
|