Prototype of Traffic Notification Handler Changed to Avoid Crash on Win64 (250906)



The information in this article applies to:

  • Microsoft Platform Software Development Kit (SDK) January 2000 Edition

This article was previously published under Q250906

SYMPTOMS

In Microsoft Platform SDK releases up to and including the January 2000 edition, the ClNotifyHandler function prototype is declared in traffic.h as follows:
typedef
VOID (CALLBACK * TCI_NOTIFY_HANDLER)(
    IN	HANDLE		ClRegCtx,
    IN	HANDLE		ClIfcCtx,
    IN	ULONG		Event,
    IN	ULONG		SubCode,
    IN	ULONG		BufSize,
    IN	PVOID		Buffer
    );
				
A Win32 traffic control program that is compiled by using the ClNotifyHandler declaration will crash in future releases of the Win64 operating system.

CAUSE

The SubCode parameter on the TC_NOTIFY_PARAM_CHANGED event contains a pointer to the globally unique identifier (GUID) for a traffic control parameter. On a Win32-based computer, this works correctly because the size of a pointer is the same as the size of ULONG. However, typing the SubCode parameter to ULONG causes an access violation on a Win64-based computer because the 64-bit pointer is truncated to 32-bit ULONG.

RESOLUTION

To allow your Win32 traffic control program to work "as is" on a future Win64-based computer, modify the ClNotifyHandler function prototype in traffic.h to the following and recompile the program:
typedef
VOID (CALLBACK * TCI_NOTIFY_HANDLER)(
    IN	HANDLE		ClRegCtx,
    IN	HANDLE		ClIfcCtx,
    IN	ULONG		Event,
    IN	HANDLE		SubCode,
    IN	ULONG		BufSize,
    IN	PVOID		Buffer
    );
				

STATUS

Microsoft has confirmed this to be a problem in Microsoft Platform SDK releases up to and including the January 2000 edition.

Modification Type:MinorLast Reviewed:2/11/2004
Keywords:kbDSWNET2003Swept kbAPI kbbug kbGQos kbnetwork kbTrafficControl KB250906