Go Back   FlashFXP Forums > >

Programming Need help with C/C++/Delphi? Ask here and make us all laugh.

Closed Thread
 
Thread Tools Rate Thread Display Modes
Old 11-13-2003, 04:15 PM   #1
darkone
Disabled
FlashFXP Registered User
ioFTPD Administrator
 
darkone's Avatar
 
Join Date: Dec 2001
Posts: 2,230
Default DC_VFS Change!

Structure this message uses, will be changed in next version, to something that is easier to use
darkone is offline  
Old 12-08-2003, 04:19 AM   #2
Miky
Member
 
Join Date: Feb 2003
Posts: 31
Default help

Hi, is this new structure?

Code:
typedef struct _DC_VFS
{
	UINT32	Uid;
	UINT32	Gid;
	DWORD	dwFileMode;
	DWORD	dwBuffer;
	PBYTE	pBuffer[1];

} DC_VFS, * LPDC_VFS;
and how it works?
where are old values? Do not necessary anymore?

When I use this structure for DC_VFS_READ I obtain {5261654, 0, 0, 1024, {NULL}}
I really haven't 5261654 users.

THX for anyhelp
Miky
Miky is offline  
Old 12-08-2003, 07:44 AM   #3
ADDiCT
Senior Member
FlashFXP Beta Tester
ioFTPD Scripter
 
Join Date: Aug 2003
Posts: 517
Default

i would also appreciate a small C++ usage example of the new structure, so i can easily convert it to VB
(now it's just guessing and trial&error for me)
ADDiCT is offline  
Old 12-08-2003, 08:01 AM   #4
Mouton
Posse Member
Ultimate Scripter
ioFTPD Administrator
 
Join Date: Dec 2002
Posts: 1,956
Default

Code:
void getFileOwner(const char *complete_filename, char *user)
{
	if (!initSharedMem(1024 + (strlen(complete_filename) + 1) + sizeof(DC_VFS))) {
		strcpy(user,"nobody");
		return;
	}
	lpMessage->dwIdentifier	= DC_VFS_READ;
	LPDC_VFS pFileInformation = (LPDC_VFS)lpMessage->lpContext;
	lpContext = (LPVOID)((ULONG)lpMessage->lpContext + sizeof(DC_VFS));
	strcpy((LPTSTR)pFileInformation->pBuffer,complete_filename);
	dwReturn = SendMessage(hIoFTPD, WM_SHMEM, NULL, (LPARAM)hMemory);
	if (!dwReturn) {
		WaitForSingleObject(hEvent,10000);

		int uid = pFileInformation->Uid;
		if (pFileInformation->dwFileMode==0 || !resolveUidToName(uid,user))
			strcpy(user,"nobody");
	} else {
		strcpy(user,"nobody");
	}
	closeSharedMem();
}
Mouton is offline  
Old 12-15-2003, 04:47 AM   #5
Miky
Member
 
Join Date: Feb 2003
Posts: 31
Default

it's better but not enough

what is
DWORD dwFileMode;
DWORD dwBuffer;
?

when I insert foldername to pBuffer and want to write new owner and groupe ioftpd crash

can you post example for DC_VFS_WRITE too or explain new structute, because only from your example I figure out that pBuffer is for file(folder??)name

THX
Miky is offline  
Old 12-15-2003, 04:53 AM   #6
darkone
Disabled
FlashFXP Registered User
ioFTPD Administrator
 
darkone's Avatar
 
Join Date: Dec 2001
Posts: 2,230
Default

when writing, dwBuffer contains length of filename + additional length of directory context. Length of filename includes terminating null character. (Additional context may contain information such as, privacy information or symbolic link target)
darkone is offline  
Old 12-15-2003, 05:08 AM   #7
Miky
Member
 
Join Date: Feb 2003
Posts: 31
Default

thanks, works fine
Miky is offline  
Old 12-15-2003, 06:35 AM   #8
darkone
Disabled
FlashFXP Registered User
ioFTPD Administrator
 
darkone's Avatar
 
Join Date: Dec 2001
Posts: 2,230
Default

Here's commands for context handling.. it uses really simple format: |type|length|data|TCHAR null|

BOOL CreateFileContext(LPFILECONTEXT lpContext, LPFILECONTEXT lpSourceContext)
{
// Copy context
if (lpSourceContext &&
lpSourceContext->dwData)
{
lpContext->dwData = lpSourceContext->dwData;
lpContext->lpData = Allocate("FileContext", lpContext->dwData);
if (! lpContext->lpData) return FALSE;
CopyMemory(lpContext->lpData, lpSourceContext->lpData, lpContext->dwData);
}
else ZeroMemory(lpContext, sizeof(FILECONTEXT));

return TRUE;
}




BOOL InsertFileContext(LPFILECONTEXT lpContext, BYTE Item, LPVOID lpData, DWORD dwData)
{
LPVOID lpMemory;
DWORD dwSlack, dwMemory;
TCHAR pBuffer[1];

pBuffer[0] = _TEXT('\0');
// Remove existing context
dwSlack = lpContext->dwData;
DeleteFileContext(lpContext, Item);
dwSlack = (lpContext->dwData ? dwSlack - lpContext->dwData : 0);

// Allocate more memory
if (dwSlack < (dwData + sizeof(BYTE) + sizeof(UINT32) + sizeof(TCHAR)))
{
lpMemory = ReAllocate(lpContext->lpData, "FileContext",
lpContext->dwData + dwData + sizeof(BYTE) + sizeof(UINT32) + sizeof(TCHAR));
if (! lpMemory) ERROR_RETURN(ERROR_NOT_ENOUGH_MEMORY, FALSE);
lpContext->lpData = lpMemory;
}

dwMemory = dwData + sizeof(BYTE) + sizeof(UINT32) + sizeof(TCHAR);
// Copy new data
CopyMemory((LPVOID)((ULONG)lpContext->lpData + lpContext->dwData),
&Item, sizeof(BYTE));
lpContext->dwData += sizeof(BYTE);
CopyMemory((LPVOID)((ULONG)lpContext->lpData + lpContext->dwData),
&dwMemory, sizeof(UINT32));
lpContext->dwData += sizeof(UINT32);
CopyMemory((LPVOID)((ULONG)lpContext->lpData + lpContext->dwData),
lpData, dwData);
lpContext->dwData += dwData;
CopyMemory((LPVOID)((ULONG)lpContext->lpData + lpContext->dwData), pBuffer, sizeof(TCHAR));
lpContext->dwData += sizeof(TCHAR);

return TRUE;
}


BOOL FreeFileContext(LPFILECONTEXT lpContext)
{
BOOL bReturn;

bReturn = Free(lpContext->lpData);
lpContext->lpData = NULL;
lpContext->dwData = 0;
return bReturn;
}


BOOL DeleteFileContext(LPFILECONTEXT lpContext, BYTE Item)
{
LPVOID lpMemory;
DWORD dwMemory;

// Remove existing context
lpMemory = FindFileContext(Item, lpContext);
if (lpMemory)
{
dwMemory = ((PUINT32)lpMemory)[-1];
lpMemory = (LPVOID)((ULONG)lpMemory - sizeof(UINT32) - sizeof(BYTE));
MoveMemory(lpMemory,
(LPVOID)((ULONG)lpMemory + dwMemory),
((ULONG)lpContext->lpData + lpContext->dwData) - ((ULONG)lpMemory + dwMemory));
lpContext->dwData -= dwMemory;
}
return TRUE;
}




LPVOID FindFileContext(BYTE Item, LPFILECONTEXT lpContext)
{
LPBYTE lpOffset;
UINT32 Size;

// Seek through buffer
lpOffset = (LPBYTE)lpContext->lpData;
for (;(ULONG)lpOffset - (ULONG)lpContext->lpData < lpContext->dwData;lpOffset += Size)
{
// Size of entry
Size = ((PUINT32)&lpOffset[1])[0] + sizeof(BYTE) + sizeof(UINT32);

if (lpOffset[0] == Item) return &lpOffset[sizeof(BYTE) + sizeof(UINT)];
}
return NULL;
}
darkone is offline  
Closed Thread

Tags
change, changed, easier, structure, version

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
dll error at startup Joel General Discussion 7 05-20-2005 01:52 PM


All times are GMT -5. The time now is 07:44 PM.

Parts of this site powered by vBulletin Mods & Addons from DragonByte Technologies Ltd. (Details)