Inproved the implimentation of NdisWriteConfiguration(), by Crashfourit.
Index: drivers/net/ndis/ndis/config.c
===================================================================
--- drivers/net/ndis/ndis/config.c (revision 21005)
+++ drivers/net/ndis/ndis/config.c (working copy)
@@ -66,6 +66,18 @@
ULONG ParameterType = ParameterValue->ParameterType;
ULONG DataSize;
PVOID Data;
+
+ /*
+ The next few lines of code before teh first if statement are used when
+ ParameterType equals NdisParameterHexInteger or NdisParameterInteger.
+ This is done so that Buff can be used beyond the switch statement.
+ */
+ UNICODE_STRING buff;
+ WCHAR str[25];
+
+ Buff->Length=0;
+ Buff->MaximumLength = sizeof(str) / sizeof(str[0]);
+ Buff->Buffer=str;
if(ParameterType != NdisParameterInteger &&
ParameterType != NdisParameterHexInteger &&
@@ -81,12 +93,29 @@
/* reset parameter type to standard reg types */
switch(ParameterType)
{
- /* TODO: figure out what do do with these; are they different? */
+ /*
+ TODO: figure out what do do with these; are they different?
+ Done by Crashfourit
+ */
case NdisParameterHexInteger:
- case NdisParameterInteger:
- ParameterType = REG_SZ;
- Data = &ParameterValue->ParameterData.IntegerData;
- DataSize = sizeof(ULONG);
+ case NdisParameterInteger:
+ {
+ if (!NT_SUCCESS(RtlIntegerToUnicodeString(
+ ParameterValue->ParameterData.IntegerData,
+ ( ParameterType == NdisParameterHexInteger ) ? 16 : 10,
+ &buff))
+ )
+ {
+ *Status = NDIS_STATUS_FAILURE;
+ return;
+ }
+ else
+ {
+ ParameterType = REG_SZ;
+ Data = &Buff->Buffer;
+ DataSize = Buff->Length;
+ }
+ }
break;
case NdisParameterString: