How do you guys debug why a dll doesn't load on a device.
For example I have a Treo 700w and a Treo 700wx. The hardware is identical except for extra ram on the wx. I install the tornado a2dp cab on the wx which I've done time and again on the w, but bta2dp.dll will not load on the wx. Yes I did run the cert cab for these dll's.
Any ideas on how to debug this? Thanks!
hannip said:
Yes I did run the cert cab for these dll's.
Click to expand...
Click to collapse
I'll assume this means that you know that the dll is signed and that the certificate that it's signed with is in the certificate store on the 700wx.
Try copying bta2dp.dll to your PC, and run the command.
dumpbin /imports bta2dp.dll
this lists the dll's that bta2dp.dll needs before it can load. Verify that these dll's are available.
How do you know that bta2dp.dll isn't loading? Do you get an error message?
SetoK said:
I'll assume this means that you know that the dll is signed and that the certificate that it's signed with is in the certificate store on the 700wx.
Try copying bta2dp.dll to your PC, and run the command.
dumpbin /imports bta2dp.dll
this lists the dll's that bta2dp.dll needs before it can load. Verify that these dll's are available.
How do you know that bta2dp.dll isn't loading? Do you get an error message?
Click to expand...
Click to collapse
Thanks for the info. I used TaskMgr and see that the WAV8 device is not loaded. There is no error. Just the missing selection to set my wireless headphones to stereo. I'll check out dumpbin and see what I find.
hannip said:
Thanks for the info. I used TaskMgr and see that the WAV8 device is not loaded. There is no error. Just the missing selection to set my wireless headphones to stereo. I'll check out dumpbin and see what I find.
Click to expand...
Click to collapse
Well I used dumpbin and verified that all of the dependencies are indeed there. I double verified that the dll's are signed and the correct cert is installed on the device. When I try to load bta2dp.dll via the TaskMgr it gives the error "The system cannot open the device or file specified."
I have to assume the file itself is fine since it loads on another device.
I'm not a windows programmer, but I do have VS2005 installed and the WM5 sdk. Is there a way programatically or otherwise to determine why it is failing to load? Any tips or tricks appreciated.
Thanks!
hannip said:
When I try to load bta2dp.dll via the TaskMgr it gives the error "The system cannot open the device or file specified."
Click to expand...
Click to collapse
A dll isn't an application that can be run on it's own, but rather a module that is loaded by the system or another application. That is you can't run it like an application.
You should be able to start "Remote Process Viewer" from vs2005. When you click on a process it will show all the dll's (modules) that the process has loaded. Try it on a device that works and the one that doesn't. compare results. I've never really played with blue tooth, but I expect that the devices or services process will have it loaded.
I'm not sure that it's the dll that isn't loading. But if you want to verify that it can load, you can use LoadLibrary or LoadLibraryEx. Then use GetLastError() if it fails. Here's some code that might help
Code:
#include <Winbase.h>
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DWORD ErrorCode=0;
TCHAR buff[100];
HINSTANCE hDLL = LoadLibraryEx(_T("bta2dp.dll"), NULL, NULL);
/* HINSTANCE hDLL = LoadLibraryEx((_T("bta2dp.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);
*/
if (hDLL == NULL)
{
ErrorCode=GetLastError();
_stprintf(buff, _T("Failed to open bta2dp.dll, error code %d"), ErrorCode);
MessageBox(NULL, buff, _T("ERROR"), MB_OK);
}
else
{
MessageBox(NULL, _T("Opened bta2dp.dll"),_T("SUCCESS"), MB_OK);
FreeLibrary(hDLL);
}
return 0;
}
Thanks Setok for the code! Just what I needed.
Related
How would I go about performing an automatic installation of several .CAB files after a cold boot of the XDA 2? These CAB files will be located on a storage card and are part of a commercial package.
Thanks
Tony Hudson
One can create a "autorun.exe" in a folder called "2577" on the memorycard..
But I'm really not sure how...
you can auto install
by putting the updates in the extented rom
http://wiki.xda-developers.com/index.php?pagename=ER2003Edit
not sure how you would go about making them be able to be located on the sd card unless you put in a program in the extented rom
which would again auto install the cab files located on the sd card
I have wrote an eVC app for installing multiple .CAB files on an SD card. I am wanting the CAB files to be installed synchronously then the device to be warm booted so I am calling ShellExecuteEx to open the CAB file, WaitForSingleObject to determine when the CAB file has finished and then KernelIoControl to reboot the device.
The problem is that WaitForSingleObject is returning before the CAB file has closed with an error code of 6 which is invalid handle.
info.cbSize = sizeof(info);
info.fMask = SEE_MASK_FLAG_NO_UI;
info.hwnd = NULL;
info.lpVerb = _T("open");
info.lpFile = (LPCWSTR) &szCAB;
info.lpParameters = _T("");
info.lpDirectory = _T("");
info.nShow = SW_SHOW;
// Call to perform an action
ShellExecuteEx(&info);
if ((long)info.hInstApp > 32)
{
dwRetVal = WaitForSingleObject(info.hProcess, INFINITE);
switch(dwRetVal)
{
case WAIT_ABANDONED:
iErrCode = 4;
break;
case WAIT_OBJECT_0:
iErrCode = 4;
break;
case WAIT_FAILED:
dwErr = GetLastError();
iErrCode = 4;
break;
default:
iErrCode = 0;
break;
}
}
When running this in debug mode the CAB file being executed has presented the user with a dialog box prompting to overwrite existing files and the WaitForSingleObject has already returned.
Any suggestions?
Thanks.
Install From Storage Card on Insertion
This details info about autoinstalls from a SD card...
But the application is also uninstalled on removal of the card?
http://msdn.microsoft.com/library/d...P/html/sp_programming_pocket_pc_2002_balr.asp
Thankyou but I have already read this, and the above listing is a section of my autorun.exe application. This does not answer the problem I have documented above but thanks for taking time to assist me.
Just to outline, the problem that I am witnessing is that all the CAB files are being opened before the previous CAB installation has completed and the device is being warm booted without all the CAB files being installed. I need to wait in the looping code until a CAB file has completed its installation. The waitforsingleobject call should do this but it appears to fail. The CAB file has been opened succesfully but the error is that an invalid handle has been provided to the call. Thanks for any help
Doh! How stupid am I - please dont everyone reply. The programming error is in that I assign the return value of WaitForSingleObject to a variable. Change the above code snippet from
dwRetVal = WaitForSingleObject(info.hProcess, INFINITE);
to
WaitForSingleObject(info.hProcess, INFINITE);
and remove the switch..case code and it works fine.
Ok. So I now have my autorun.exe program that installs my CAB files but where do I put it in order for it to automatically install after a cold boot? I have tried the .EXE in "\storage card\2577" and in "\storage\2577" neither of them working. Modifying extended ROM is not an option here as this is a commercial package that is distributed on an SD card. I simply want the user to insert the SD card and then do a cold boot that will then install the CAB files. Is this possible and if so how? Thanks.
Got it all working now, the .EXE does go into the SD card subdirectory \storage card\2577.
HI,
Have you (or someOne else) tried to call registry keys (mostly interested in network connections) from this autorun.exe?
Herman
autorun?
what did you use for an autorun.exe??
is the code u put up earlier comilable to an autrun.exe?
(not a coder per se ,but dibble little here and there)
or is it from the sdk?
It it possible for u to post it as a attachment here?
Re: autorun?
lynxlynx said:
what did you use for an autorun.exe??
is the code u put up earlier comilable to an autrun.exe?
(not a coder per se ,but dibble little here and there)
or is it from the sdk?
It it possible for u to post it as a attachment here?
Click to expand...
Click to collapse
The Autorun.exe file can be whatever exe file you want.
that I understand...but what if I wanna install more than 1 thing...I have a list of stuff I wanna do...like a couple of .cab and some .exe´s and maybe a .cpf.....how can I get them all to run automatically on cardinsert....
I gave the code to a programmer at work..I will see what he comes upp with...but I thinkthat there should be somekind of "public" autrun.exe with a .cfg file with it to download here at xda-dev.
If mine works I will post it later...
How to DLL hook in windows CE?
for example how to hook RIL_Dial in ril.dll?
the process is nearly similar to normal Windows. For example you can make a wrapper around the dll, or patch its export table, or import table of app that uses it. Read cracking sites for more info.
Thanks for replay.
I need a sample code for used fast.
But WinCE does not support SetWindowHook and CreateRemoteThread (at least I cannot find it in the SDK help)
We can use VirtualProtect to change API entry but I cannot enter address space of other process.
that means we can hook API within our program only we cannot implement interprocess API interception like under win32 platform.
Writting a wrapper for API is too tough for big DLLs with hundreds of APIs.
Patching export table in binary file is impossible for system DLLs in the ROM.
headache
SetWindowsHook is obsolete. Use SetWindowsHookEx.
There is no need to use CreateRemoteThread. All processes in CE share the same 4Gb linear address space and can access each other's data. To convert a pointer from your or any other processes' address to a "global" that can be accessed from everywhere use a poorly docummented function:
Code:
extern"C" LPVOID MapPtrToProcess(LPVOID lpv, HANDLE hProc);
To inject DLL into address space of other process I use
Code:
typedef struct _CALLBACKINFO {
HANDLE hProc; /* destination process */
FARPROC pfn; /* function to call in dest. process */
PVOID pvArg0; /* arg0 data */
} CALLBACKINFO;
typedef CALLBACKINFO *PCALLBACKINFO;
extern"C" DWORD PerformCallBack4(CALLBACKINFO *pcbi,...);
...
HANDLE Proc=OpenProcess(0,0,Pid);
void *Ptr=MapPtrToProcess(L"phonehook.dll",GetCurrentProcess());
CALLBACKINFO ci;
ci.hProc=Proc;
void *t=GetProcAddress(GetModuleHandle(L"coredll.dll"),L"LoadLibraryW");
ci.pfn=(FARPROC)MapPtrToProcess(t,Proc);
ci.pvArg0=Ptr;
PerformCallBack4(&ci);
CloseHandle(Proc);
The method is unstable - it can hang your device if the process was inside an API function. I call Sleep(500) before PerformCallBack4 and it works in most cases.
The other metod that allows hooking of most kernel functions is patching the SystemAPISets table. Search this forum, an example was posted here.
I Understand attach dll to other process but no Understand to change the original function adress to my hook function .
for example in hook dll write this code
Code:
typedef HRESULT t_RIL_Dial(HRIL hRil, LPCSTR lpszAddress, DWORD dwType, DWORD dwOptions);
HRESULT New_RIL_Dial(HRIL hRil, LPCSTR lpszAddress, DWORD dwType, DWORD dwOptions);
t_RIL_Dial *Old_RIL_Dial;
HINSTANCE hRilDll = LoadLibrary(L"\\Windows\\Ril.Dll");
Old_RIL_Dial = (t_RIL_Dial*)GetProcAddress(hRilDll, L"RIL_Dial");
and my hook function
Code:
HRESULT New_RIL_Dial(HRIL hRil, LPCSTR lpszAddress, DWORD dwType, DWORD dwOptions)
{
// hook code
}
how to change the Old_RIL_Dial to New_RIL_Dial.
please help me.
Cannot give you a simple code to demonstrate it. You must have knowledge of assembly language and how win32 system works.
in breif,
1. use system hook to enter other process
2. get entry address of API
3. change protection type of that address
5. save that value
4. replace that address with your function and a long jmp
5. in your function, write that value back and call original API and replace that address again.
6. Use interprocess communication APIs.
7. keep multi-thread safe and be very careful
I think SetWindowsHookEx is not a documented API in win CE sdk/MSDN.
This isn't anything like regular win32 hooking. Because WINCE uses XIP technology.
Since rill.dll and rilgsm.dll are XIP dll's, they're executed directly from ROM. Without being loaded to RAM. Therefore, it is not possible to patch those modules "on the fly" and insert a jump/hook because ROM is read only.
Correct me if I'm wrong?
This isn't anything like regular win32 hooking. Because WINCE uses XIP technology.
Since rill.dll and rilgsm.dll are XIP dll's, they're executed directly from ROM. Without being loaded to RAM. Therefore, it is not possible to patch those modules "on the fly" and insert a jump/hook because ROM is read only.
Correct me if I'm wrong?
Click to expand...
Click to collapse
this is true only sometimes:
modern devices usual have in ROM only 5-10 files (example Dell x51v)
Also if ROM code section is compressed, it will be decompressed to RAM at first.
XIP is eXecution In Place, so all above can't be called XIP.
I received a CAB file from my friend, and when I tried to install it, I found that it has a popup message from my friend telling me a joke...
how he do that?
and how can I change that message?
Still No Comment...!
Please Help!
I asume you know how to make a cab to start with????
As you know there are exported functions in the dll that the cab uses (you make the dll). For example this is the normal look of whats exportd. Bellow is whats in the def file.
--------------------------------------------------------------------------
; TestSetup.def : Declares the module parameters for the DLL.
LIBRARY "TESTSETUP"
;DESCRIPTION 'TESTSETUP Windows CE Dynamic Link Library'
EXPORTS
Install_Init
Install_Exit
Uninstall_Init
Uninstall_Exit
now in the code for one of those you just make a dialog like normal.
The code below is cut out of one of my working cabs. Because its in Install_Init it is the first thing to happen. Changing the method to Install_Exit would give the message after the instalation.
#include "stdafx.h"
#include "TestSetup.h"
#include "ce_setup.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "MyAboutDialog.h"
BOOL CALLBACK gAboutDialogProc(HWND h_dlg, UINT my_message, WPARAM wpAram, LPARAM lpAram);
static CMyAboutDialog* myAbout= new CMyAboutDialog();
BOOL CALLBACK gAboutDialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return myAbout->AboutProc(hWnd,uMsg,wParam,lParam);
}
/////////////////////////////////////////////////////////////////////////////
// CTestSetupApp
BEGIN_MESSAGE_MAP(CTestSetupApp, CWinApp)
//{{AFX_MSG_MAP(CTestSetupApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestSetupApp construction
CTestSetupApp::CTestSetupApp()
{
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CTestSetupApp object
CTestSetupApp theApp;
/////////////////////////////////////////////////////////////////////
codeINSTALL_INIT
Install_Init( HWND hwndParent,
BOOL fFirstCall,
BOOL fPreviouslyInstalled,
LPCTSTR pszInstallDir )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DialogBox:AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDD_AboutDIALOG),
hwndParent,
(DLGPROC)gAboutDialogProc);
return codeINSTALL_INIT_CONTINUE;
}
//------------------------------------------------------------------
Of course the detail of the dialog is in the MyAboutDialog. You just make your own to do what you want.
You can do just about anything from the code you put in the cab's dll, but a lot of the instalation should be left up to cabwiz to generate. What ever you do put in the dll will permanently reside in the windows folder until the user removes the program, so don't make it too big.
Thanks Dear OdeeanRDeathshead...
your reply is more than an informative article.
however, I hope if you can answer my second part of the question...
how can I remove the message from a CAB file that i have?
I you want to remove the message on an existing cab then that is more complicated. If you know everything that the cab dose when it gets tapped (eg registry changes etc) then you could gather all the file that the cab installs and use them to re-write them into a new cab that has no messages. This is more trouble than its worth. Unless your friend is willing to give you detailed info on what his cab dose you would be bound to miss something.
Also many messages are as a result of the os, and these vary depending on the version of os. You can't stop some of those (on every platform).
Most people would not want their instalation packages tampered with.
Try to extract the .cab file with Win CE Cab manager. Remove the Setup.dll, hopefully it does not do anything else then showing the joke Then build your own version of it.
for any complex instalation I doubt that doing that would leave you with a working instalation. Still its worth a go if it saves time. What I would like to know (not having vis studio 2005 yet) is why dose the wm2005 device always ask where you want to put the software even when you have turned this feature off? When one's coding gets a bit lazy it can all fall appart when put in a location other than that you expect.
OdeeanRDeathshead, I assume you are referring to whether to install to main memory or to SD question (this dialog pups up on WM5 device with SD inserted or built in storage).
To avoid it remove the InstDir string from your inf file (or change the string name to something else). This will force the software installation to the directory you specify in the cab.
I did not want to hard code the directory, so I used
InstallDir="%CE2%"
That should get the location of the windows folder for the install. Are you saying that if I just put
InstallDir="\windows\"
it will force it there. Dose this mean that there is a new table of Windows CE Directory Identifiers or that installs just always ask if you use them?
No, what I meant was you don’t want a string call 'InstallDir' in your inf file.
The 'InstallDir' is just a string definition you may or may not use later in the inf (like #define in C).
What determines where the files are installed is what's in the [DestinationDirs] section.
For example:
Files.Windows = 0,%CE2%
You should delete the line InstallDir = completely from your inf file, or if this string appears else where (except [CEStrings] section) just change it to something like MyDir= (be sure to change it every ware it appears in the file)
I'm trying to launch TCPMP from a small CF.NET 2.0 application, but I can't get System.Diagnostics.Process.Start to do anything for me. Here's a sample:
Code:
const string TCPMPLocation = @"\Progam Files\TCPMP\player.exe";
System.Diagnostics.ProcessStartInfo TCPMPInfo = new System.Diagnostics.ProcessStartInfo();
TCPMPInfo.FileName = TCPMPLocation;
TCPMPInfo.UseShellExecute = false;
TCPMPInfo.Arguments = null;
TCPMPInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(TCPMPLocation);
System.Diagnostics.Process.Start(TCPMPInfo);
But everytime I try to run the code in the emulator, I get a Win32Exception: "The system cannot find the file specified."
I installed TCPMP on the emulator to the default location, so player.exe does appear to be in \Program Files\TCPMP. Am I specifying the path incorrectly or something?
I am not sure why is it not working since i don't have TCPMP installed. but try to run it from the explorer on the emulator and check if it runs or exists or not.
I tried ur code on another application (\windows\clock.exe) and it worked fine..
Well, it resolved itself somehow. I decided to go ahead and move the location of TCPMP to my config file instead of a constant while I waited on a reply. And of course it's working fine now that I put it there.
Thanks for looking at it.
Can you please tell me how did you resolve the issue.
did you place the path in config file?
please let me know because even i am facing the same issue
Thanks in advace!!
Dromio said:
I'm trying to launch TCPMP from a small CF.NET 2.0 application, but I can't get System.Diagnostics.Process.Start to do anything for me. Here's a sample:
Code:
const string TCPMPLocation = @"\Progam Files\TCPMP\player.exe";
System.Diagnostics.ProcessStartInfo TCPMPInfo = new System.Diagnostics.ProcessStartInfo();
TCPMPInfo.FileName = TCPMPLocation;
TCPMPInfo.UseShellExecute = false;
TCPMPInfo.Arguments = null;
TCPMPInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(TCPMPLocation);
System.Diagnostics.Process.Start(TCPMPInfo);
But everytime I try to run the code in the emulator, I get a Win32Exception: "The system cannot find the file specified."
I installed TCPMP on the emulator to the default location, so player.exe does appear to be in \Program Files\TCPMP. Am I specifying the path incorrectly or something?
Click to expand...
Click to collapse
mmmmm... Isn't it ProgRam files instead of Progam? ...
That could have been it. I posted the original message months ago. And as I mentioned, it was resolved when I started using a setting to specify the path rather than hard-coding it. It's very likely that it was that typo.
I'm hoping someone can help me build a small exe that will change a single registry value.
Device: Touch Pro running custom 6.5.3 ROM built from SDK
Problem: on my Touch Pro, when I run the 'Align Screen' routine, the following registry entry is created...
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\KEYBD]
"FirstCalibration"=dword:00000001
For some reason this is conflicting with the default Windows Unlock routine and causes a 2 to 3 second delay when turning on the device.
http://forum.xda-developers.com/showthread.php?t=587931
Deleting or changing the key to dword:00000000 prevents the issue. This is easily fixed manually.
Reason: I am building a WM 6.5.3 ROM ported from the 6.5.3 SDK released by MS last month (99% complete). I am doing it in a way that uses little to no 3rd party software, just a few basic drivers. I would like to avoid using MortScript or FdcSoft TaskMgr. I find that stylus accuracy is poor if I skip the Screen Align during Welcome/First boot. Since the registry is changed after the initial first boot, it is not possible to make the change part of my ROM.
My options are to have the user make the change manually themselves, have them run a cab to make the change or create a small exe that runs during start up that sets the key to 0. I think option 3 is best (I'm open to other ideas).
Anyway, I have eVC++ 4 + PPC2003 SDK installed (I don't have access to VS2005 or 2008).
I also modified a snipet of code that I found which should make the change for me....
Code:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
namespace RegistryAccess
{
class Program
{
static void Main(string[] args)
{
RegistryKey baseKey = Registry.LocalMachine;
RegistryKey hardwareKey = baseKey.OpenSubKey("HARDWARE", true);
RegistryKey devicemapKey = hardwareKey.OpenSubKey("DEVICEMAP", true);
RegistryKey keybdKey = devicemapKey.OpenSubKey("KEYBD", true);
keybdKey.SetValue("FirstCalibration", 0);
}
}
}
I'm stuck compiling/building the above code into a executable. Any help would be appreciated. =)
I did a search for the RegistryKey class and it looks like it is part of .NET, which I can't do with eVC++.
I did find the following page which has several samples of code for accessing the registry using eVC++. Using voregistry seems like a good idea.
http://windowsmobiledn.com/working-with-registry-on-pocket-pc/
I tried to use the voregistry code in a new project, but when I build it I get an error due to CString being undeclared. I'm guessing I need to include a library that includes the CString class, but I'm not sure what to include.
Well I'm more a newbie that an expert, but
Won't a .cab solve it ?
you can put reg change in .cab
So you will just have to install it each time it is necessary... instead of runnig an .exe
This should do the trick....
In eVC create an app as a simple CE application.
Code:
#include "stdafx.h"
#include "Winreg.h"
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DWORD Value=0;
HKEY RegKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\HARDWARE\\DEVICEMAP\\KEYBD"),0,0,&RegKey);
RegSetValueEx(RegKey,TEXT("FirstCalibration"),NULL,REG_DWORD, (unsigned char *) &Value ,sizeof Value);
RegCloseKey(RegKey);
return 0;
}
Works perfectly stephj, thank you so very much.
darksasas said:
Well I'm more a newbie that an expert, but
Won't a .cab solve it ?
you can put reg change in .cab
So you will just have to install it each time it is necessary... instead of runnig an .exe
Click to expand...
Click to collapse
True, this change could be made by cab. Actually, there are many ways to make the change manually or automatically (use MortScript to execute change, import reg using TaskMgr, use AutoRun to execute provxml, etc etc). In this case, I wanted to implement a fix that would require no intervention by the user of my ROM and didn't use any 3rd party software.
I may not use it in my final version, but now I have the option if I so choose. Thank you again stephj.
Mabey it's an idea to make your ROM UC Capable?
[App] ROM Flashing Junkies: User Customization is here!
http://forum.xda-developers.com/showthread.php?t=366337
Within this thread there is an application called SDConfig.txt creator which was created by DoeDoe's. Currently it is replaced by;
[Release] UC ROM SDConfig.txt Builder (reborn) [Prikolchik Ed.]
http://forum.xda-developers.com/showthread.php?t=390846
and ofcourse;
SDConfig Builder Mobile by l3v5y
http://forum.xda-developers.com/showthread.php?p=2114491
It's just an idea
Senax
Senax said:
[App] ROM Flashing Junkies: User Customization is here!
http://forum.xda-developers.com/showthread.php?t=366337
Within this thread there is an application called SDConfig.txt creator which was created by DoeDoe's. Currently it is replaced by;
[Release] UC ROM SDConfig.txt Builder (reborn) [Prikolchik Ed.]
http://forum.xda-developers.com/showthread.php?t=390846
and ofcourse;
SDConfig Builder Mobile by l3v5y
http://forum.xda-developers.com/showthread.php?p=2114491
It's just an idea
Senax
Click to expand...
Click to collapse
That would work as well, but again with 3rd party software.