Extended attributes

Does anybody have any example code for querying and setting extended
attributes. Below is the code I am using to query extended attibutes at
the moment but when I copy a file I get a message saying that the extended
attributes are inconsistent. I am running on Windows 2000.

#define FLAGS_NAME “OFFlags”
#define FILE_NAME “FileName”
#define EA_FLAGS_SIZE
quadAlign(sizeof(FILE_FULL_EA_INFORMATION)+sizeof(FLAGS_NAME)-1+sizeof(LARGE_INTEGER))

#define EA_FILENAME_SIZE
quadAlign(sizeof(FILE_FULL_EA_INFORMATION)+sizeof(FILE_NAME)-1+OF_MAX_PATH_LEN+1)

#define EA_SIZE EA_FLAGS_SIZE+EA_FILENAME_SIZE

eaInfo = (PFILE_FULL_EA_INFORMATION)getCallersBuffer(ptrIrp,
NormalPagePriority);
if (eaInfo == NULL)
try_return(RC = STATUS_INSUFFICIENT_RESOURCES);

if (ptrIoStackLocation->MajorFunction == IRP_MJ_QUERY_EA)
{
// Now, obtain some parameters.
bufferLength = exptrIoStackLocation->Parameters.QueryEa.Length;
if (bufferLength < EA_SIZE)
try_return(RC = STATUS_BUFFER_OVERFLOW);
eaInfo->NextEntryOffset = EA_FLAGS_SIZE;
eaInfo->Flags = FILE_NEED_EA;
eaInfo->EaNameLength = sizeof(FLAGS_NAME)-1;
eaInfo->EaValueLength = sizeof(ptrFCB->ofFlags);
RtlCopyMemory(&eaInfo->EaName[0], FLAGS_NAME, sizeof(FLAGS_NAME));
RtlCopyMemory(&eaInfo->EaName[0]+sizeof(FLAGS_NAME), &ptrFCB->ofFlags,
sizeof(ptrFCB->ofFlags));
((char*)eaInfo) += EA_FLAGS_SIZE;
eaInfo->NextEntryOffset = 0;
eaInfo->Flags = FILE_NEED_EA;
eaInfo->EaNameLength = sizeof(FILE_NAME)-1;
eaInfo->EaValueLength = OF_MAX_PATH_LEN+1;
RtlCopyMemory(&eaInfo->EaName[0], FILE_NAME, sizeof(FILE_NAME));
RtlCopyMemory(&eaInfo->EaName[0]+sizeof(FILE_NAME),
&ptrFCB->fileNameProperty[0], OF_MAX_PATH_LEN+1);
bytesTransfered = EA_SIZE;
}