e32tools/e32lib/seclib/seclib.cpp
changeset 0 044383f39525
child 590 360bd6b35136
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/e32tools/e32lib/seclib/seclib.cpp	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,137 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32tools/seclib/seclib.cpp
+// Get the capabilities of an emulator / e32image.
+// 
+//
+
+#include <e32cmn.h>
+#include <e32ldr.h>
+#include <seclib.h>
+
+#include "e32image.h"
+#include "h_utl.h"
+
+#define __E32DEBUG_H__
+#include "setcap.h"
+
+
+GLDEF_C TInt GetSecurityInfo(const char* aFileName, SBinarySecurityInfo& aInfo)
+	{
+	// Check we have a filename
+	if (!aFileName)
+		{
+		return KErrNotFound;
+		}
+
+	// Zero the capabilities
+	memset(aInfo.iCapabilities, 0, KCapabilitySetMaxSize);
+
+	// We don't want to update the image's capabilities
+	CapabilitySet = EFalse;
+
+	// Try opening the file as an E32Image
+	E32ImageFile f;
+	TInt r = f.Open(aFileName);
+
+	if (r==KErrCorrupt || r==KErrNotSupported || r==1)
+		{
+#ifndef __LINUX__
+		// Try emulator format
+		aInfo.iE32Image = EFalse;
+
+		HANDLE file = CreateFileA(aFileName, 
+		                          GENERIC_READ|GENERIC_WRITE, 
+								  FILE_SHARE_READ|FILE_SHARE_WRITE, 
+								  NULL, 
+								  OPEN_EXISTING, 
+								  0, 
+								  NULL);
+		if (file == INVALID_HANDLE_VALUE)
+			{
+			return GetLastError();
+			}
+
+		r = SetCap(file);
+#endif
+		}
+	else
+		{
+		// Extract caps from E32Image
+		aInfo.iE32Image = ETrue;
+
+		r = SetCap(f.iOrigHdr);
+		}
+
+	if (r == KErrNone)
+		{
+		aInfo.iSecureId = SecureId.iId;
+		aInfo.iVendorId = VendorId.iId;
+		*(SCapabilitySet*)(aInfo.iCapabilities) = Capability;
+		}
+
+	return r;
+	}
+
+
+#ifndef __LINUX__
+GLDEF_C TInt GetSecurityInfo(const wchar_t* aFileName, SBinarySecurityInfo& aInfo)
+	{
+	// Check we have a filename
+	if (!aFileName)
+		{
+		return KErrNotFound;
+		}
+
+	// Zero the capabilities
+	memset(aInfo.iCapabilities, 0, KCapabilitySetMaxSize);
+
+	// We don't want to update the image's capabilities
+	CapabilitySet = EFalse;
+
+	// Try opening the file as an E32Image
+	E32ImageFile f;
+	TInt r = f.Open(aFileName);
+
+	if (r==KErrCorrupt || r==KErrNotSupported)
+		{
+		// Try emulator format
+		aInfo.iE32Image = EFalse;
+
+		HANDLE file = CreateFileW(aFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
+		if (file == INVALID_HANDLE_VALUE)
+			{
+			return GetLastError();
+			}
+
+		r = SetCap(file);
+		}
+	else
+		{
+		// Extract caps from E32Image
+		aInfo.iE32Image = ETrue;
+
+		r = SetCap(f.iOrigHdr);
+		}
+
+	if (r == KErrNone)
+		{
+		aInfo.iSecureId = SecureId.iId;
+		aInfo.iVendorId = VendorId.iId;
+		*(SCapabilitySet*)(aInfo.iCapabilities) = Capability;
+		}
+
+	return r;
+	}
+#endif