From f0a2afd0cb3adf0454fdbeafaaee332f03d221c4 Mon Sep 17 00:00:00 2001 From: wj32 Date: Wed, 28 Jul 2010 06:06:28 +0000 Subject: [PATCH] * fixed command line handling * refreshed fixlib.exe and libs git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3442 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/CHANGELOG.txt | 1 + 2.x/trunk/ProcessHacker/main.c | 27 +-- 2.x/trunk/ProcessHacker/runas.c | 59 +---- 2.x/trunk/lib/lib32/ntdll.exp | Bin 260516 -> 260516 bytes 2.x/trunk/lib/lib32/ntdll.lib | Bin 444178 -> 444178 bytes 2.x/trunk/lib/lib32/samlib.exp | Bin 11227 -> 11227 bytes 2.x/trunk/lib/lib32/samlib.lib | Bin 19650 -> 19650 bytes 2.x/trunk/lib/lib64/ntdll.exp | Bin 255791 -> 255791 bytes 2.x/trunk/lib/lib64/ntdll.lib | Bin 418084 -> 418084 bytes 2.x/trunk/lib/lib64/samlib.exp | Bin 10888 -> 10888 bytes 2.x/trunk/lib/lib64/samlib.lib | Bin 18324 -> 18324 bytes 2.x/trunk/phlib/basesup.c | 120 ++++++++-- 2.x/trunk/phlib/include/ph.h | 8 +- 2.x/trunk/phlib/include/phbase.h | 24 +- 2.x/trunk/phlib/support.c | 212 +++++++++++------- 2.x/trunk/tools/fiin/main.c | 2 +- 2.x/trunk/tools/fixlib/bin/Release/fixlib.exe | Bin 76800 -> 76800 bytes 17 files changed, 277 insertions(+), 176 deletions(-) diff --git a/2.x/trunk/CHANGELOG.txt b/2.x/trunk/CHANGELOG.txt index 8cd59fcbd..6cf972699 100644 --- a/2.x/trunk/CHANGELOG.txt +++ b/2.x/trunk/CHANGELOG.txt @@ -9,6 +9,7 @@ Process Hacker * Relative start times * FIXED: * Run and Run As shortcuts + * Command line handling 2.1 * NEW/IMPROVED: diff --git a/2.x/trunk/ProcessHacker/main.c b/2.x/trunk/ProcessHacker/main.c index 69fa0be60..5caa3b608 100644 --- a/2.x/trunk/ProcessHacker/main.c +++ b/2.x/trunk/ProcessHacker/main.c @@ -597,22 +597,19 @@ BOOLEAN NTAPI PhpCommandLineOptionCallback( } else { - if (Value) + PPH_STRING lowerValue; + + lowerValue = PhDuplicateString(Value); + PhLowerString(lowerValue); + + if (PhStringIndexOfString(lowerValue, 0, L"taskmgr.exe") != -1) { - PPH_STRING lowerValue; - - lowerValue = PhDuplicateString(Value); - PhLowerString(lowerValue); - - if (PhStringIndexOfString(lowerValue, 0, L"taskmgr.exe") != -1) - { - // User probably has Process Hacker replacing Task Manager. Force - // the main window to start visible. - PhStartupParameters.ShowVisible = TRUE; - } - - PhDereferenceObject(lowerValue); + // User probably has Process Hacker replacing Task Manager. Force + // the main window to start visible. + PhStartupParameters.ShowVisible = TRUE; } + + PhDereferenceObject(lowerValue); } return TRUE; @@ -649,7 +646,7 @@ VOID PhpProcessStartupParameters() &commandLine, options, sizeof(options) / sizeof(PH_COMMAND_LINE_OPTION), - PH_COMMAND_LINE_IGNORE_UNKNOWN_OPTIONS | PH_COMMAND_LINE_IGNORE_FIRST_PART | PH_COMMAND_LINE_CALLBACK_ALL_MAIN, + PH_COMMAND_LINE_IGNORE_UNKNOWN_OPTIONS | PH_COMMAND_LINE_IGNORE_FIRST_PART, PhpCommandLineOptionCallback, NULL )) diff --git a/2.x/trunk/ProcessHacker/runas.c b/2.x/trunk/ProcessHacker/runas.c index 0a26d2753..a184dffcf 100644 --- a/2.x/trunk/ProcessHacker/runas.c +++ b/2.x/trunk/ProcessHacker/runas.c @@ -635,6 +635,8 @@ VOID PhSetDesktopWinStaAccess() HDESK desktopHandle; SECURITY_DESCRIPTOR securityDescriptor; + // TODO: Set security on the correct window station and desktop. + // Create a security descriptor with a NULL DACL, // thereby allowing everyone to access the object. RtlCreateSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION); @@ -661,53 +663,6 @@ VOID PhSetDesktopWinStaAccess() } } -/** - * Escapes a string C-style for use in a command line. - * - * \param String The string to escape. - * - * \return The escaped string. - * - * \remarks Only backslash (\\) and quote characters (", ') are - * escaped. - */ -PPH_STRING PhpCEscapeString( - __in PPH_STRINGREF String - ) -{ - PPH_STRING string; - PH_STRING_BUILDER stringBuilder; - ULONG length; - ULONG i; - WCHAR temp[2]; - - length = String->Length / 2; - PhInitializeStringBuilder(&stringBuilder, String->Length / 2 * 3); - - temp[0] = '\\'; - - for (i = 0; i < length; i++) - { - switch (String->Buffer[i]) - { - case '\\': - case '\"': - case '\'': - temp[1] = String->Buffer[i]; - PhStringBuilderAppendEx(&stringBuilder, temp, 4); - break; - default: - PhStringBuilderAppendChar(&stringBuilder, String->Buffer[i]); - break; - } - } - - string = PhReferenceStringBuilderString(&stringBuilder); - PhDeleteStringBuilder(&stringBuilder); - - return string; -} - PPH_STRING PhpBuildRunAsServiceCommandLine( __in PWSTR Program, __in_opt PWSTR UserName, @@ -734,14 +689,14 @@ PPH_STRING PhpBuildRunAsServiceCommandLine( PhStringBuilderAppend2(&commandLineBuilder, L"\" -ras"); PhInitializeStringRef(&stringRef, Program); - string = PhpCEscapeString(&stringRef); + string = PhEscapeCommandLinePart(&stringRef); PhStringBuilderAppend2(&commandLineBuilder, L" -c \""); PhStringBuilderAppend(&commandLineBuilder, string); PhStringBuilderAppendChar(&commandLineBuilder, '\"'); PhDereferenceObject(string); PhInitializeStringRef(&stringRef, DesktopName); - string = PhpCEscapeString(&stringRef); + string = PhEscapeCommandLinePart(&stringRef); PhStringBuilderAppend2(&commandLineBuilder, L" -D \""); PhStringBuilderAppend(&commandLineBuilder, string); PhStringBuilderAppendChar(&commandLineBuilder, '\"'); @@ -750,14 +705,14 @@ PPH_STRING PhpBuildRunAsServiceCommandLine( if (!ProcessIdWithToken) { PhInitializeStringRef(&stringRef, UserName); - string = PhpCEscapeString(&stringRef); + string = PhEscapeCommandLinePart(&stringRef); PhStringBuilderAppend2(&commandLineBuilder, L" -u \""); PhStringBuilderAppend(&commandLineBuilder, string); PhStringBuilderAppendChar(&commandLineBuilder, '\"'); PhDereferenceObject(string); PhInitializeStringRef(&stringRef, Password); - string = PhpCEscapeString(&stringRef); + string = PhEscapeCommandLinePart(&stringRef); PhStringBuilderAppend2(&commandLineBuilder, L" -p \""); PhStringBuilderAppend(&commandLineBuilder, string); PhStringBuilderAppendChar(&commandLineBuilder, '\"'); @@ -979,7 +934,7 @@ NTSTATUS PhRunAsCommandStart2( L"-c -ctype processhacker -caction runas -cobject \"" ); - string = PhpCEscapeString(&commandLine->sr); + string = PhEscapeCommandLinePart(&commandLine->sr); PhStringBuilderAppend(&argumentsBuilder, string); PhDereferenceObject(string); diff --git a/2.x/trunk/lib/lib32/ntdll.exp b/2.x/trunk/lib/lib32/ntdll.exp index 06e22c068175a13b53b9a00fb678efd6b26aa16e..6ca67b81f8e4b61cc1844d67d1f19d0fad7cdb02 100644 GIT binary patch delta 34 pcmZ4TnSaS=es&*5W(McO{u9|dnSoT}{_!4GsVR delta 34 pcmZ4TnSaS=es&*5W(EZpuZirP%s{Gfa_eNq*2zp;Co>EF1OUkN3%~#X diff --git a/2.x/trunk/lib/lib32/ntdll.lib b/2.x/trunk/lib/lib32/ntdll.lib index 7d84a1f5d1e52a2e5e07e8894346f7b8874f83bd..978d315a402d884db46fc537500df67fda901b2c 100644 GIT binary patch delta 48427 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 diff --git a/2.x/trunk/lib/lib32/samlib.exp b/2.x/trunk/lib/lib32/samlib.exp index df3a17a53ec9a088526eecedd08ccc9f5ed3a623..1e628c6665b14de974484ab243c34a58eb6de480 100644 GIT binary patch delta 23 dcmcZ|emk7qhmo1V^|1d$_D*IXwQ;hCHUMNI2t@z@ delta 23 dcmcZ|emk7qhmo0KN1)e4_D*IXwQ;hCHUMPC2t5D* diff --git a/2.x/trunk/lib/lib32/samlib.lib b/2.x/trunk/lib/lib32/samlib.lib index ac8cb9b9401d991991e21f9063107de6400a4bf9..c6040532fff91830ebef08af9351cd13b358f7b0 100644 GIT binary patch delta 1956 zcmZ`)J4{ny6mG3mnpQw>@Dd(EQ7GJ$w)ElcrO!+08$t-P(Zvx7lY=qQ#KaH>o1BR_ z0FwhDl&}yJ9dI-R92}gKD3iuWjDs;o|40A+=Mo%y&UeoFzVDp>c6ZsnyKJv@wZubV zBc?|Us4JaY<9C#1V7so=lrs}3hjSF9k`{@17}D=C@#W1P%F041pKgTN(LaTG9QMO{%L7339j z!I(@4`Y(fsK4HdMjD=8d5qy4Huy+h08}yjCK_bpW#7(Q+aKUiHhsudP3A(PZg|5_b z*P2jaKg@L;g>|WeI-ZE|#B8L96I{z)q>O_qv{g8|8qHf1n^C^F5kg%d)c>CAgRjvm z5=6}uBr-8X0`Fx#h8z*zd9R}&rTjamc<7Ogl36M-3by(OAeunK#DY3>w4ei>i&{D@ z_y-5+5TSH2j+BZPU*f2*;Ca(PJh9w&29k@f%^bI^Pa3p2ZmCegnc%*6Cr|>@e4Icu zal)QNiEN5na4(sYo1tj3J{Pr=u5S(W0C%ek*7Z|(ZA_p^xGv1p+- z@c^7W5CVh?G0_88L%@RvPfC=N#z>3@V~oCeua7rN@YtDeX1?#6dE1>u@6MvP(p+QN zcHA~i6E?J_&EdP+abRmhtEgX?hTGvf-}ZEAYd-wbdyHe5%ka3j!Ot?2+puS}!*=gy zclxE#zzcVcc2Zc0>JW%%n1N6vtx76Ug9jm!Rl()B4o49!fMX&akLQdh2#&84{Mj}I z`feH=(9Hlo2JoKMVcF-0sgfJS+yClwR3(ymFd)dx^^*h&-|xS~D-Qc@Rk5MzkdBIq zndqQONcyj$gg#@&TMU?_w+y~GE!Z|dkX3qITo)4;Wa6gu7Pw#s;6v%eo+RDcn2WB` zanGI5VJ{|h9L6lA107GsMPfQWP7^}QZoEi?I@Fg0x||quC)N{UalMSX#;E^2*A8D3 zR}=`%lq9l)gaqBo>L77MdKbD*f=KyyUJK%p^s!kwGYU34Iw6rH!{mY*EwZ3}ONd%H zE%=89afnnpKSY$u7GH))U&-^9O?Xnd?`$HMUYj%QTAwm#eb`l@gFh*JZ%L8_rTHXD zXwrl?MH0ERu;6|wuQr2dw!T`l6xY`Uk5W1`qN4Drj%=-_0<4aHbP10R2|2bK!tU9*Y&iM`Jf8c08xs~&N#tma7c z+uR9s+!5%aGo{eDFzNCehq%n>a+&zWF<~X&2!XmV>DSssRCAIL899#>56Ctb-#jc#A42BvK zs3!PWe;!(>@415TeYQZ>C?_8k$YgrmcgD$e(_=}&^h7iK7{99Akh>~R{KvrzulY0) zQZ>>KyGRJgOI<6HMpdQ!+lopZc3j_DJKTR7c!3Mm&)ZUIM$N%$_CEMR!e#QBqysBu aLV&IP_z!A~&6#U!1$)wEyD;Jvv?;o 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 Qe*Q%AgWYn}P4u+?KWXE*T>t<8 diff --git a/2.x/trunk/lib/lib64/samlib.exp b/2.x/trunk/lib/lib64/samlib.exp index e6698fe0089db798678ec4dcd28a8a48704cca9b..7f2ac4a294810ed9360495a3574f3f06348e359e 100644 GIT binary patch delta 23 dcmeAO?FeO0X=7$^J?uY`y^|S8ZJhj7698dn2;%?% delta 23 dcmeAO?FeO0X=7&C5$H9My^|S8ZJhj7698fh2-^Sv diff --git a/2.x/trunk/lib/lib64/samlib.lib b/2.x/trunk/lib/lib64/samlib.lib index bfd2b5a7c7982111286c9b590552e9bf1bd78d1a..95401848f454a7b2a940b783f61bafdeb69b796f 100644 GIT binary patch delta 1968 zcmZ`(OH31C5Z(rqH;RR}q6h_-ZMQAmw$yfOu@7ho(dfa0a%f88BQfZKlQD#-7d@DO zaYzit3r9mtXzGQNB;G9tZ^mfi$rueDJQ;%jV}JkIRrfga?Kj^y^UtiVxK>wOkNaEG zM%+xM#!c9bcx&ctk1bHI^<1$>e5NtPzq$6S51N$Hn+xaKU5e5Q3+l1@^^tcjNwA}N z;IewSiD2sU>H$Y)d6Z|?M>ShUr+C=YPGce-ycIyf%>WO62uxz67ji*&86oTEj%dW>8skznT_xB{@}h-g zLTbkyc#%XMz<;<;IsW*VpH_VaI!Qnw0&@9!;aYTBum#-i=!O;p0iBEy2JDBY zPPPSWD{g0Jq#immF`A!QG&5nbG9fLBCN(BdlL)Yr&XAs=xYDdZWr%EG+M$r#GiHU} zvjkDN?DN8T6Ey~JgqE{ygnaz#IrM6&aj_LWd6d9Z_wx=aaT|W+9k-!U;0j|zp-B{0 zyEW(N_+uR;fD8fDy8GZ+8Cek5>sk>lh3I3W_;()*ld_Mbx2%mLg#8R{qyLZxF6mwH zGK+3L_8go-o~>8FPU_l}qy@1-T_xKFdEjQLmrW!=3Kof-{i8v6RYGr4YY?a_W%F@ delta 1968 zcmZ`(OHUI~6rKi@H;RR}q9_lCX{RlnGSqfzu@7hoYD|m^Wzm$xM`F+gD`N;zH@YwZ z;~_B^H!KY?p{Wa5$uF=h+!>>ZD`PacaAgSI$6W83QD=G1H{bcbbM84S%bt~G&*R?a zq-B|wVHmIz^;fN#E=QnN?YiQO1T3SUf3vMuA2cYhFPu5o>QR(tm{*U~t`EKQNP=z6 z2ba}@4Fpr0Q}?+tOT#>~Hmo@^I>p1Tb_x^m;H@AEZUlMoLvR8k{g4fLTd1r7MNt|c zs|VnFp&jmqyb@+abOsqDkVXcXo#=q)u|p0B6JqJ(GPo1vHP`h74*FqF_cC-(I4%?0 z8b>dLk!(_$A-{$ZuLzbS{|MG`a9d*r8AU#d&_Y@*>X62Z^^G`!e%Lg)-iJ6rx!;fQ z#E%iw)s3JZF2;D`Myx0uewyU`pJRC$q%_eKN6#22L0;IO!gT{F!ltaaH1)*d^y~4g zq^Dx$a-9D7C=w&uy*i58O{pJcIl9ICPvQijnF% zF|^mJ!dCj2{L`+_Kqm+&OhBGMH{5I651NUbQ?_cz%YYFAjM%`fwoYg=5YWvSWx!r| z>Smj_x8inYTI!)Q6QlW=K{FE;%j43bXi|L~HHiS*=?v)^8dVw@8h_IigZ5%k@gG+h` zyv(4Rk3EMbk!SlAu#>tvDQQ7$P)E_RK|Z)y>}C@&Nx=fKvv)WIuZqYHr4%QyspR;Z ZU$n&%5+HnjD@mVhfu^VUrdFmBzX4b8ExP~! diff --git a/2.x/trunk/phlib/basesup.c b/2.x/trunk/phlib/basesup.c index 312be9c54..90c803fcc 100644 --- a/2.x/trunk/phlib/basesup.c +++ b/2.x/trunk/phlib/basesup.c @@ -1364,12 +1364,13 @@ VOID PhFullStringAppend2( * Appends a string to the end of a string. * * \param String A string object. - * \param Buffer The string to append. + * \param Buffer The string to append. Specify NULL + * to simply reserve \a Length bytes. * \param Length The number of bytes to append. */ VOID PhFullStringAppendEx( __inout PPH_FULL_STRING String, - __in PWSTR Buffer, + __in_opt PWSTR Buffer, __in SIZE_T Length ) { @@ -1380,11 +1381,15 @@ VOID PhFullStringAppendEx( if (String->AllocatedLength < String->Length + Length) PhResizeFullString(String, String->Length + Length, TRUE); - memcpy( - &String->Buffer[String->Length / sizeof(WCHAR)], - Buffer, - Length - ); + if (Buffer) + { + memcpy( + &String->Buffer[String->Length / sizeof(WCHAR)], + Buffer, + Length + ); + } + String->Length += Length; PhpWriteFullStringNullTerminator(String); } @@ -1408,6 +1413,35 @@ VOID PhFullStringAppendChar( PhpWriteFullStringNullTerminator(String); } +/** + * Appends a number of characters to the end of a string. + * + * \param String A string object. + * \param Character The character to append. + * \param Count The number of times to append the character. + */ +VOID PhFullStringAppendChar2( + __inout PPH_FULL_STRING String, + __in WCHAR Character, + __in SIZE_T Count + ) +{ + if (Count == 0) + return; + + if (String->AllocatedLength < String->Length + Count * sizeof(WCHAR)) + PhResizeFullString(String, String->Length + Count * sizeof(WCHAR), TRUE); + + wmemset( + &String->Buffer[String->Length / sizeof(WCHAR)], + Character, + Count + ); + + String->Length += Count * sizeof(WCHAR); + PhpWriteFullStringNullTerminator(String); +} + /** * Appends a formatted string to the end of a string. * @@ -1603,12 +1637,13 @@ VOID PhStringBuilderAppend2( * string. * * \param StringBuilder A string builder object. - * \param String The string to append. + * \param String The string to append. Specify NULL to + * simply reserve \a Length bytes. * \param Length The number of bytes to append. */ VOID PhStringBuilderAppendEx( __inout PPH_STRING_BUILDER StringBuilder, - __in PWSTR String, + __in_opt PWSTR String, __in ULONG Length ) { @@ -1623,11 +1658,15 @@ VOID PhStringBuilderAppendEx( // Copy the string, add the length, then write the null terminator. - memcpy( - &StringBuilder->String->Buffer[StringBuilder->String->Length / sizeof(WCHAR)], - String, - Length - ); + if (String) + { + memcpy( + &StringBuilder->String->Buffer[StringBuilder->String->Length / sizeof(WCHAR)], + String, + Length + ); + } + StringBuilder->String->Length += (USHORT)Length; PhpWriteStringBuilderNullTerminator(StringBuilder); } @@ -1654,6 +1693,39 @@ VOID PhStringBuilderAppendChar( PhpWriteStringBuilderNullTerminator(StringBuilder); } +/** + * Appends a number of characters to the end of a string + * builder string. + * + * \param StringBuilder A string builder object. + * \param Character The character to append. + * \param Count The number of times to append the character. + */ +VOID PhStringBuilderAppendChar2( + __inout PPH_STRING_BUILDER StringBuilder, + __in WCHAR Character, + __in ULONG Count + ) +{ + if (Count == 0) + return; + + // See if we need to re-allocate the string. + if (StringBuilder->AllocatedLength < StringBuilder->String->Length + Count * sizeof(WCHAR)) + { + PhpResizeStringBuilder(StringBuilder, StringBuilder->String->Length + Count * sizeof(WCHAR)); + } + + wmemset( + &StringBuilder->String->Buffer[StringBuilder->String->Length / sizeof(WCHAR)], + Character, + Count + ); + + StringBuilder->String->Length += (USHORT)(Count * sizeof(WCHAR)); + PhpWriteStringBuilderNullTerminator(StringBuilder); +} + /** * Appends a formatted string to the end of a string builder * string. @@ -1726,13 +1798,14 @@ VOID PhStringBuilderInsert2( * \param StringBuilder A string builder object. * \param Index The index, in characters, at which to * insert the string. - * \param String The string to insert. + * \param String The string to insert. Specify NULL to + * simply reserve \a Length bytes. * \param Length The number of bytes to insert. */ VOID PhStringBuilderInsertEx( __inout PPH_STRING_BUILDER StringBuilder, __in ULONG Index, - __in PWSTR String, + __in_opt PWSTR String, __in ULONG Length ) { @@ -1755,12 +1828,15 @@ VOID PhStringBuilderInsertEx( ); } - // Copy the new string. - memcpy( - &StringBuilder->String->Buffer[Index], - String, - Length - ); + if (String) + { + // Copy the new string. + memcpy( + &StringBuilder->String->Buffer[Index], + String, + Length + ); + } StringBuilder->String->Length += (USHORT)Length; PhpWriteStringBuilderNullTerminator(StringBuilder); diff --git a/2.x/trunk/phlib/include/ph.h b/2.x/trunk/phlib/include/ph.h index ef8b759ab..e5dacbd0f 100644 --- a/2.x/trunk/phlib/include/ph.h +++ b/2.x/trunk/phlib/include/ph.h @@ -2532,7 +2532,6 @@ typedef BOOLEAN (NTAPI *PPH_COMMAND_LINE_CALLBACK)( #define PH_COMMAND_LINE_IGNORE_UNKNOWN_OPTIONS 0x1 #define PH_COMMAND_LINE_IGNORE_FIRST_PART 0x2 -#define PH_COMMAND_LINE_CALLBACK_ALL_MAIN 0x4 PHLIBAPI PPH_STRING PhParseCommandLinePart( @@ -2543,11 +2542,16 @@ PPH_STRING PhParseCommandLinePart( PHLIBAPI BOOLEAN PhParseCommandLine( __in PPH_STRINGREF CommandLine, - __in PPH_COMMAND_LINE_OPTION Options, + __in_opt PPH_COMMAND_LINE_OPTION Options, __in ULONG NumberOfOptions, __in ULONG Flags, __in PPH_COMMAND_LINE_CALLBACK Callback, __in PVOID Context ); +PHLIBAPI +PPH_STRING PhEscapeCommandLinePart( + __in PPH_STRINGREF String + ); + #endif diff --git a/2.x/trunk/phlib/include/phbase.h b/2.x/trunk/phlib/include/phbase.h index acb35556e..ab8614fcd 100644 --- a/2.x/trunk/phlib/include/phbase.h +++ b/2.x/trunk/phlib/include/phbase.h @@ -1539,7 +1539,7 @@ VOID NTAPI PhFullStringAppendEx( __inout PPH_FULL_STRING String, - __in PWSTR Buffer, + __in_opt PWSTR Buffer, __in SIZE_T Length ); @@ -1551,6 +1551,15 @@ PhFullStringAppendChar( __in WCHAR Character ); +PHLIBAPI +VOID +NTAPI +PhFullStringAppendChar2( + __inout PPH_FULL_STRING String, + __in WCHAR Character, + __in SIZE_T Count + ); + PHLIBAPI VOID NTAPI @@ -1633,7 +1642,7 @@ VOID NTAPI PhStringBuilderAppendEx( __inout PPH_STRING_BUILDER StringBuilder, - __in PWSTR String, + __in_opt PWSTR String, __in ULONG Length ); @@ -1645,6 +1654,15 @@ PhStringBuilderAppendChar( __in WCHAR Character ); +PHLIBAPI +VOID +NTAPI +PhStringBuilderAppendChar2( + __inout PPH_STRING_BUILDER StringBuilder, + __in WCHAR Character, + __in ULONG Count + ); + PHLIBAPI VOID NTAPI @@ -1678,7 +1696,7 @@ NTAPI PhStringBuilderInsertEx( __inout PPH_STRING_BUILDER StringBuilder, __in ULONG Index, - __in PWSTR String, + __in_opt PWSTR String, __in ULONG Length ); diff --git a/2.x/trunk/phlib/support.c b/2.x/trunk/phlib/support.c index db6c87cad..9f1aafd5d 100644 --- a/2.x/trunk/phlib/support.c +++ b/2.x/trunk/phlib/support.c @@ -2996,69 +2996,79 @@ PPH_STRING PhParseCommandLinePart( ULONG length; ULONG i; - BOOLEAN inEscape; + ULONG numberOfBackslashes; BOOLEAN inQuote; BOOLEAN endOfValue; length = CommandLine->Length / 2; i = *Index; + // This function follows the rules used by CommandLineToArgvW: + // + // * 2n backslashes and a quotation mark produces n backslashes and a quotation mark (non-literal). + // * 2n + 1 backslashes and a quotation mark produces n and a quotation mark (literal). + // * n backslashes and no quotation mark produces n backslashes. + PhInitializeStringBuilder(&stringBuilder, 10); - inEscape = FALSE; + numberOfBackslashes = 0; inQuote = FALSE; endOfValue = FALSE; for (; i < length; i++) { - if (inEscape) + switch (CommandLine->Buffer[i]) { - switch (CommandLine->Buffer[i]) + case '\\': + numberOfBackslashes++; + break; + case '\"': + if (numberOfBackslashes != 0) + { + if (numberOfBackslashes & 1) + { + numberOfBackslashes /= 2; + + if (numberOfBackslashes != 0) + { + PhStringBuilderAppendChar2(&stringBuilder, '\\', numberOfBackslashes); + numberOfBackslashes = 0; + } + + PhStringBuilderAppendChar(&stringBuilder, '\"'); + + break; + } + else + { + numberOfBackslashes /= 2; + PhStringBuilderAppendChar2(&stringBuilder, '\\', numberOfBackslashes); + numberOfBackslashes = 0; + } + } + + if (!inQuote) + inQuote = TRUE; + else + inQuote = FALSE; + + break; + default: + if (numberOfBackslashes != 0) + { + PhStringBuilderAppendChar2(&stringBuilder, '\\', numberOfBackslashes); + numberOfBackslashes = 0; + } + + if (CommandLine->Buffer[i] == ' ' && !inQuote) + { + endOfValue = TRUE; + } + else { - case '\\': - case '\"': - case '\'': PhStringBuilderAppendChar(&stringBuilder, CommandLine->Buffer[i]); - break; - default: - // Unknown escape. Append both the backslash and - // escape character. - PhStringBuilderAppendEx( - &stringBuilder, - &CommandLine->Buffer[i - 1], - 4 - ); - break; } - inEscape = FALSE; - } - else - { - switch (CommandLine->Buffer[i]) - { - case '\\': - inEscape = TRUE; - break; - case '\"': - case '\'': - if (!inQuote) - inQuote = TRUE; - else - inQuote = FALSE; - - break; - default: - if (CommandLine->Buffer[i] == ' ' && !inQuote) - { - endOfValue = TRUE; - } - else - { - PhStringBuilderAppendChar(&stringBuilder, CommandLine->Buffer[i]); - } - - break; - } + break; } if (endOfValue) @@ -3075,7 +3085,7 @@ PPH_STRING PhParseCommandLinePart( BOOLEAN PhParseCommandLine( __in PPH_STRINGREF CommandLine, - __in PPH_COMMAND_LINE_OPTION Options, + __in_opt PPH_COMMAND_LINE_OPTION Options, __in ULONG NumberOfOptions, __in ULONG Flags, __in PPH_COMMAND_LINE_CALLBACK Callback, @@ -3092,8 +3102,6 @@ BOOLEAN PhParseCommandLine( PPH_COMMAND_LINE_OPTION option = NULL; PPH_STRING optionValue; - PPH_STRING mainArgumentValue = NULL; - if (CommandLine->Length == 0) return TRUE; @@ -3178,51 +3186,93 @@ BOOLEAN PhParseCommandLine( } else { - // If PH_COMMAND_LINE_CALLBACK_ALL_MAIN was not specified: - // Value with no option. This becomes our "main argument". - // If we had a previous "main argument", replace it with - // this one. + PPH_STRING value; - if (mainArgumentValue) - PhDereferenceObject(mainArgumentValue); - - mainArgumentValue = PhParseCommandLinePart(CommandLine, &i); + value = PhParseCommandLinePart(CommandLine, &i); if ((Flags & PH_COMMAND_LINE_IGNORE_FIRST_PART) && wasFirst) { - if (mainArgumentValue) - { - PhDereferenceObject(mainArgumentValue); - mainArgumentValue = NULL; - } + PhDereferenceObject(value); + value = NULL; } - if (Flags & PH_COMMAND_LINE_CALLBACK_ALL_MAIN) + if (value) { - // This makes PH_COMMAND_LINE_CALLBACK_ALL_MAIN cooperate with - // PH_COMMAND_LINE_IGNORE_FIRST_PART. - if (mainArgumentValue) - { - cont = Callback(NULL, mainArgumentValue, Context); - PhDereferenceObject(mainArgumentValue); - mainArgumentValue = NULL; + cont = Callback(NULL, value, Context); + PhDereferenceObject(value); - if (!cont) - break; - } + if (!cont) + break; } wasFirst = FALSE; } } - // If PH_COMMAND_LINE_CALLBACK_ALL_MAIN is enabled this won't run - // because mainArgumentValue is set to NULL after processing. - if (mainArgumentValue) - { - Callback(NULL, mainArgumentValue, Context); - PhDereferenceObject(mainArgumentValue); - } - return TRUE; } + +/** + * Escapes a string for use in a command line. + * + * \param String The string to escape. + * + * \return The escaped string. + * + * \remarks Only the double quotation mark is escaped. + */ +PPH_STRING PhEscapeCommandLinePart( + __in PPH_STRINGREF String + ) +{ + static WCHAR backslashAndQuote[2] = { '\\', '\"' }; + + PPH_STRING string; + PH_STRING_BUILDER stringBuilder; + ULONG length; + ULONG i; + + ULONG numberOfBackslashes; + + length = String->Length / 2; + PhInitializeStringBuilder(&stringBuilder, String->Length / 2 * 3); + numberOfBackslashes = 0; + + // Simply replacing " with \" won't work here. See PhParseCommandLinePart + // for the quoting rules. + + for (i = 0; i < length; i++) + { + switch (String->Buffer[i]) + { + case '\\': + numberOfBackslashes++; + break; + case '\"': + if (numberOfBackslashes != 0) + { + PhStringBuilderAppendChar2(&stringBuilder, '\\', numberOfBackslashes * 2); + numberOfBackslashes = 0; + } + + PhStringBuilderAppendEx(&stringBuilder, backslashAndQuote, sizeof(backslashAndQuote)); + + break; + default: + if (numberOfBackslashes != 0) + { + PhStringBuilderAppendChar2(&stringBuilder, '\\', numberOfBackslashes); + numberOfBackslashes = 0; + } + + PhStringBuilderAppendChar(&stringBuilder, String->Buffer[i]); + + break; + } + } + + string = PhReferenceStringBuilderString(&stringBuilder); + PhDeleteStringBuilder(&stringBuilder); + + return string; +} diff --git a/2.x/trunk/tools/fiin/main.c b/2.x/trunk/tools/fiin/main.c index 88c3cd161..6a9170d50 100644 --- a/2.x/trunk/tools/fiin/main.c +++ b/2.x/trunk/tools/fiin/main.c @@ -294,7 +294,7 @@ int __cdecl main(int argc, char *argv[]) &commandLine, options, sizeof(options) / sizeof(PH_COMMAND_LINE_OPTION), - PH_COMMAND_LINE_IGNORE_FIRST_PART | PH_COMMAND_LINE_CALLBACK_ALL_MAIN, + PH_COMMAND_LINE_IGNORE_FIRST_PART, FiCommandLineCallback, NULL ) || FiArgHelp) diff --git a/2.x/trunk/tools/fixlib/bin/Release/fixlib.exe b/2.x/trunk/tools/fixlib/bin/Release/fixlib.exe index 688bbf5bfa2f479387afd1799bbc506b5b845537..d89daad931fa70d201c9e2cc738d741db7188af2 100644 GIT binary patch delta 16195 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